33namespace CodedMonkey \Dirigent \Controller \Dashboard ;
44
55use CodedMonkey \Dirigent \Attribute \IsGrantedAccess ;
6+ use CodedMonkey \Dirigent \Doctrine \Entity \Dependent ;
67use CodedMonkey \Dirigent \Doctrine \Entity \Package ;
78use CodedMonkey \Dirigent \Doctrine \Entity \PackageFetchStrategy ;
9+ use CodedMonkey \Dirigent \Doctrine \Entity \Suggester ;
810use CodedMonkey \Dirigent \Doctrine \Repository \PackageRepository ;
911use CodedMonkey \Dirigent \EasyAdmin \PackagePaginator ;
1012use CodedMonkey \Dirigent \Form \PackageAddMirroringFormType ;
@@ -74,10 +76,16 @@ public function info(string $packageName, ?string $packageVersion = null): Respo
7476 $ version = $ package ->getLatestVersion ();
7577 }
7678
79+ $ dependentCount = $ this ->entityManager ->getRepository (Dependent::class)->count (['dependentPackageName ' => $ package ->getName ()]);
80+ $ suggesterCount = $ this ->entityManager ->getRepository (Suggester::class)->count (['suggestedPackageName ' => $ package ->getName ()]);
81+
7782 return $ this ->render ('dashboard/packages/package_info.html.twig ' , [
7883 'package ' => $ package ,
7984 'latestVersion ' => $ latestVersion ,
8085 'version ' => $ version ,
86+
87+ 'dependentCount ' => $ dependentCount ,
88+ 'suggesterCount ' => $ suggesterCount ,
8189 ]);
8290 }
8391
@@ -96,6 +104,58 @@ public function versions(string $packageName): Response
96104 ]);
97105 }
98106
107+ #[Route('/dashboard/packages/dependents/{packageName} ' , name: 'dashboard_packages_dependents ' , requirements: ['packageName ' => '[a-z0-9_.-]+/[a-z0-9_.-]+ ' ])]
108+ #[IsGrantedAccess]
109+ public function dependents (Request $ request , string $ packageName ): Response
110+ {
111+ $ package = $ this ->packageRepository ->findOneBy (['name ' => $ packageName ]);
112+
113+ $ dependentRepository = $ this ->entityManager ->getRepository (Dependent::class);
114+ $ queryBuilder = $ dependentRepository ->createQueryBuilder ('dependent ' );
115+ $ queryBuilder
116+ ->leftJoin ('dependent.package ' , 'package ' )
117+ ->andWhere ('dependent.dependentPackageName = :packageName ' )
118+ ->setParameter ('packageName ' , $ package ->getName ())
119+ ->addOrderBy ('package.name ' , 'ASC ' );
120+
121+ $ paginatorDto = new PaginatorDto (20 , 3 , 1 , true , null );
122+ $ paginatorDto ->setPageNumber ($ request ->query ->getInt ('page ' , 1 ));
123+ $ paginator = (new PackagePaginator ($ this ->adminUrlGenerator ))->paginate ($ paginatorDto , $ queryBuilder );
124+ $ dependents = $ paginator ->getResults ();
125+
126+ return $ this ->render ('dashboard/packages/package_dependents.html.twig ' , [
127+ 'package ' => $ package ,
128+ 'dependents ' => $ dependents ,
129+ 'paginator ' => $ paginator ,
130+ ]);
131+ }
132+
133+ #[Route('/dashboard/packages/suggesters/{packageName} ' , name: 'dashboard_packages_suggesters ' , requirements: ['packageName ' => '[a-z0-9_.-]+/[a-z0-9_.-]+ ' ])]
134+ #[IsGrantedAccess]
135+ public function suggesters (Request $ request , string $ packageName ): Response
136+ {
137+ $ package = $ this ->packageRepository ->findOneBy (['name ' => $ packageName ]);
138+
139+ $ suggesterRepository = $ this ->entityManager ->getRepository (Suggester::class);
140+ $ queryBuilder = $ suggesterRepository ->createQueryBuilder ('suggester ' );
141+ $ queryBuilder
142+ ->leftJoin ('suggester.package ' , 'package ' )
143+ ->andWhere ('suggester.suggestedPackageName = :packageName ' )
144+ ->setParameter ('packageName ' , $ package ->getName ())
145+ ->addOrderBy ('package.name ' , 'ASC ' );
146+
147+ $ paginatorDto = new PaginatorDto (20 , 3 , 1 , true , null );
148+ $ paginatorDto ->setPageNumber ($ request ->query ->getInt ('page ' , 1 ));
149+ $ paginator = (new PackagePaginator ($ this ->adminUrlGenerator ))->paginate ($ paginatorDto , $ queryBuilder );
150+ $ suggesters = $ paginator ->getResults ();
151+
152+ return $ this ->render ('dashboard/packages/package_suggesters.html.twig ' , [
153+ 'package ' => $ package ,
154+ 'suggesters ' => $ suggesters ,
155+ 'paginator ' => $ paginator ,
156+ ]);
157+ }
158+
99159 #[Route('/dashboard/packages/statistics/{packageName} ' , name: 'dashboard_packages_statistics ' , requirements: ['packageName ' => '[a-z0-9_.-]+/[a-z0-9_.-]+ ' ])]
100160 #[IsGrantedAccess]
101161 public function statistics (string $ packageName ): Response
0 commit comments