44
55use CodedMonkey \Dirigent \Attribute \IsGrantedAccess ;
66use CodedMonkey \Dirigent \Attribute \MapPackage ;
7- use CodedMonkey \Dirigent \Doctrine \Entity \Metadata ;
87use CodedMonkey \Dirigent \Doctrine \Entity \Package ;
98use CodedMonkey \Dirigent \Doctrine \Entity \PackageProvideLink ;
109use CodedMonkey \Dirigent \Doctrine \Entity \PackageRequireLink ;
@@ -23,6 +22,7 @@ class DashboardPackagesInfoController extends AbstractController
2322{
2423 public function __construct (
2524 private readonly EntityManagerInterface $ entityManager ,
25+ private readonly MetadataRepository $ metadataRepository ,
2626 ) {
2727 }
2828
@@ -31,24 +31,40 @@ public function __construct(
3131 */
3232 #[Route('/packages/{package} ' , name: 'dashboard_packages_info ' , requirements: ['package ' => MapPackage::PACKAGE_REGEX ])]
3333 #[IsGrantedAccess]
34- public function info (#[MapPackage] Package $ package ): Response
34+ public function info (Request $ request , #[MapPackage] Package $ package ): Response
3535 {
3636 $ version = $ package ->getLatestVersion ();
3737
3838 if (!$ version ) {
3939 return $ this ->redirectToRoute ('dashboard_packages_versions ' , ['package ' => $ package ->getName ()]);
4040 }
4141
42- return $ this ->versionInfo ($ package , $ version );
42+ return $ this ->versionInfo ($ request , $ package , $ version, latest: true );
4343 }
4444
4545 #[Route('/packages/{package}/versions/{version} ' , name: 'dashboard_packages_version_info ' , requirements: ['package ' => MapPackage::PACKAGE_REGEX , 'version ' => '.* ' ])]
4646 #[IsGrantedAccess]
47- public function versionInfo (#[MapPackage] Package $ package , #[MapPackage] Version $ version ): Response
48- {
49- /** @var MetadataRepository $metadataRepository */
50- $ metadataRepository = $ this ->entityManager ->getRepository (Metadata::class);
51- $ metadataRepository ->fetchMetadataCollections ($ version ->getCurrentMetadata ());
47+ public function versionInfo (
48+ Request $ request ,
49+ #[MapPackage] Package $ package ,
50+ #[MapPackage] Version $ version ,
51+ bool $ latest = false ,
52+ ): Response {
53+ $ metadata = $ version ->getCurrentMetadata ();
54+ $ revision = $ request ->query ->getInt ('revision ' );
55+
56+ // Only check for a revision number if the route is for a specific version: $latest !== true
57+ if (0 !== $ revision && !$ latest ) {
58+ $ metadata = $ this ->metadataRepository ->findOneBy (['version ' => $ version , 'revision ' => $ revision ]);
59+
60+ if (null === $ metadata ) {
61+ throw $ this ->createNotFoundException ('The revision does not exist. ' );
62+ }
63+ }
64+
65+ $ this ->metadataRepository ->fetchMetadataCollections ($ metadata );
66+
67+ $ metadataCount = $ this ->metadataRepository ->getMetadataCountForVersion ($ version );
5268
5369 $ dependentCount = $ this ->entityManager ->getRepository (PackageRequireLink::class)->count (['linkedPackageName ' => $ package ->getName ()]);
5470 $ implementationCount = $ this ->entityManager ->getRepository (PackageProvideLink::class)->count (['linkedPackageName ' => $ package ->getName (), 'implementation ' => true ]);
@@ -58,15 +74,32 @@ public function versionInfo(#[MapPackage] Package $package, #[MapPackage] Versio
5874 return $ this ->render ('dashboard/packages/package_info.html.twig ' , [
5975 'package ' => $ package ,
6076 'version ' => $ version ,
61- 'metadata ' => $ version -> getCurrentMetadata () ,
77+ 'metadata ' => $ metadata ,
6278
6379 'dependentCount ' => $ dependentCount ,
6480 'implementationCount ' => $ implementationCount ,
81+ 'metadataCount ' => $ metadataCount ,
6582 'providerCount ' => $ providerCount ,
6683 'suggesterCount ' => $ suggesterCount ,
6784 ]);
6885 }
6986
87+ #[Route('/packages/{package}/revisions/{version} ' , name: 'dashboard_packages_version_metadata_list ' , requirements: ['package ' => MapPackage::PACKAGE_REGEX , 'version ' => '.* ' ])]
88+ #[IsGrantedAccess]
89+ public function versionMetadataList (
90+ #[MapPackage] Package $ package ,
91+ #[MapPackage] Version $ version ,
92+ ): Response {
93+ $ metadataCollection = $ this ->metadataRepository ->getMetadataCollectionForVersion ($ version );
94+
95+ return $ this ->render ('dashboard/packages/package_version_revisions.html.twig ' , [
96+ 'package ' => $ package ,
97+ 'version ' => $ version ,
98+
99+ 'metadataCollection ' => $ metadataCollection ,
100+ ]);
101+ }
102+
70103 #[Route('/packages/{package}/versions ' , name: 'dashboard_packages_versions ' , requirements: ['package ' => MapPackage::PACKAGE_REGEX ])]
71104 #[IsGrantedAccess]
72105 public function versions (#[MapPackage] Package $ package ): Response
0 commit comments