55use App \Model \Repository ;
66use Github \Api \Issue \Labels ;
77use Github \Exception \RuntimeException ;
8+ use Github \ResultPager ;
89use Psr \Log \LoggerInterface ;
910use Symfony \Contracts \Cache \CacheInterface ;
1011use Symfony \Contracts \Cache \ItemInterface ;
1415 */
1516class GithubLabelApi implements LabelApi
1617{
18+ /**
19+ * In memory cache for specific issues.
20+ *
21+ * @var array<array-key, array<array-key, bool>>
22+ */
23+ private $ labelCache = [];
24+
1725 /**
1826 * @var Labels
1927 */
2028 private $ labelsApi ;
2129
2230 /**
23- * In memory cache for specific issues.
24- *
25- * @var array<array-key, array<array-key, bool>>
31+ * @var ResultPager
2632 */
27- private $ labelCache = [] ;
33+ private $ resultPager ;
2834
2935 /**
3036 * @var CacheInterface
@@ -36,9 +42,10 @@ class GithubLabelApi implements LabelApi
3642 */
3743 private $ logger ;
3844
39- public function __construct (Labels $ labelsApi , CacheInterface $ cache , LoggerInterface $ logger )
45+ public function __construct (Labels $ labelsApi , ResultPager $ resultPager , CacheInterface $ cache , LoggerInterface $ logger )
4046 {
4147 $ this ->labelsApi = $ labelsApi ;
48+ $ this ->resultPager = $ resultPager ;
4249 $ this ->cache = $ cache ;
4350 $ this ->logger = $ logger ;
4451 }
@@ -118,14 +125,9 @@ public function addIssueLabels($issueNumber, array $labels, Repository $reposito
118125 */
119126 public function getAllLabelsForRepository (Repository $ repository ): array
120127 {
121- $ key = ' labels ' . sha1 ( $ repository -> getFullName () );
128+ $ allLabels = $ this -> getAllLabels ( $ repository );
122129
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 ' );
129131 }
130132
131133 /**
@@ -136,8 +138,8 @@ public function getComponentLabelsForRepository(Repository $repository): array
136138 $ key = 'component_labels_ ' .sha1 ($ repository ->getFullName ());
137139
138140 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 );
141143 $ componentLabels = [];
142144 foreach ($ labels as $ label ) {
143145 if ('dddddd ' === strtolower ($ label ['color ' ])) {
@@ -149,6 +151,18 @@ public function getComponentLabelsForRepository(Repository $repository): array
149151 });
150152 }
151153
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+
152166 private function getCacheKey ($ issueNumber , Repository $ repository )
153167 {
154168 return sprintf ('%s_%s_%s ' , $ issueNumber , $ repository ->getVendor (), $ repository ->getName ());
0 commit comments