5
5
use App \Model \Repository ;
6
6
use Github \Api \Issue \Labels ;
7
7
use Github \Exception \RuntimeException ;
8
+ use Github \ResultPager ;
8
9
use Psr \Log \LoggerInterface ;
9
10
use Symfony \Contracts \Cache \CacheInterface ;
10
11
use Symfony \Contracts \Cache \ItemInterface ;
14
15
*/
15
16
class GithubLabelApi implements LabelApi
16
17
{
18
+ /**
19
+ * In memory cache for specific issues.
20
+ *
21
+ * @var array<array-key, array<array-key, bool>>
22
+ */
23
+ private $ labelCache = [];
24
+
17
25
/**
18
26
* @var Labels
19
27
*/
20
28
private $ labelsApi ;
21
29
22
30
/**
23
- * In memory cache for specific issues.
24
- *
25
- * @var array<array-key, array<array-key, bool>>
31
+ * @var ResultPager
26
32
*/
27
- private $ labelCache = [] ;
33
+ private $ resultPager ;
28
34
29
35
/**
30
36
* @var CacheInterface
@@ -36,9 +42,10 @@ class GithubLabelApi implements LabelApi
36
42
*/
37
43
private $ logger ;
38
44
39
- public function __construct (Labels $ labelsApi , CacheInterface $ cache , LoggerInterface $ logger )
45
+ public function __construct (Labels $ labelsApi , ResultPager $ resultPager , CacheInterface $ cache , LoggerInterface $ logger )
40
46
{
41
47
$ this ->labelsApi = $ labelsApi ;
48
+ $ this ->resultPager = $ resultPager ;
42
49
$ this ->cache = $ cache ;
43
50
$ this ->logger = $ logger ;
44
51
}
@@ -118,14 +125,9 @@ public function addIssueLabels($issueNumber, array $labels, Repository $reposito
118
125
*/
119
126
public function getAllLabelsForRepository (Repository $ repository ): array
120
127
{
121
- $ key = ' labels ' . sha1 ( $ repository -> getFullName () );
128
+ $ allLabels = $ this -> getAllLabels ( $ repository );
122
129
123
- return $ this ->cache ->get ($ key , function (ItemInterface $ item ) use ($ repository ) {
124
- $ labels = $ this ->labelsApi ->all ($ repository ->getVendor (), $ repository ->getName ()) ?? [];
125
- $ item ->expiresAfter (36000 );
126
-
127
- return array_column ($ labels , 'name ' );
128
- });
130
+ return array_column ($ allLabels , 'name ' );
129
131
}
130
132
131
133
/**
@@ -136,8 +138,8 @@ public function getComponentLabelsForRepository(Repository $repository): array
136
138
$ key = 'component_labels_ ' .sha1 ($ repository ->getFullName ());
137
139
138
140
return $ this ->cache ->get ($ key , function (ItemInterface $ item ) use ($ repository ) {
139
- $ labels = $ this ->labelsApi -> all ($ repository-> getVendor (), $ repository -> getName ()) ?? [] ;
140
- $ item ->expiresAfter (36000 );
141
+ $ labels = $ this ->getAllLabels ($ repository) ;
142
+ $ item ->expiresAfter (86400 );
141
143
$ componentLabels = [];
142
144
foreach ($ labels as $ label ) {
143
145
if ('dddddd ' === strtolower ($ label ['color ' ])) {
@@ -149,6 +151,18 @@ public function getComponentLabelsForRepository(Repository $repository): array
149
151
});
150
152
}
151
153
154
+ private function getAllLabels (Repository $ repository ): array
155
+ {
156
+ $ key = 'labels_ ' .sha1 ($ repository ->getFullName ());
157
+
158
+ return $ this ->cache ->get ($ key , function (ItemInterface $ item ) use ($ repository ) {
159
+ $ labels = $ this ->resultPager ->fetchAll ($ this ->labelsApi , 'all ' , [$ repository ->getVendor (), $ repository ->getName ()]) ?? [];
160
+ $ item ->expiresAfter (604800 );
161
+
162
+ return $ labels ;
163
+ });
164
+ }
165
+
152
166
private function getCacheKey ($ issueNumber , Repository $ repository )
153
167
{
154
168
return sprintf ('%s_%s_%s ' , $ issueNumber , $ repository ->getVendor (), $ repository ->getName ());
0 commit comments