diff --git a/src/Controller/Api/ApiForwardController.php b/src/Controller/Api/ApiForwardController.php index e1aafa38..1635c4fd 100644 --- a/src/Controller/Api/ApiForwardController.php +++ b/src/Controller/Api/ApiForwardController.php @@ -27,6 +27,12 @@ public function item(string $name) return $this->forward('Packeton\Controller\PackageController::viewPackageAction', ['name' => $name, '_format' => 'json']); } + #[Route('/packages/{name}/dependents', name: 'packages_dependents', requirements: ['name' => '([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?|ext-[A-Za-z0-9_.-]+?)'], methods: ['GET'])] + public function dependents(string $name) + { + return $this->forward('Packeton\Controller\PackageController::dependentsAction', ['name' => $name, '_format' => 'json']); + } + #[Route('/packages/{name}/changelog', name: 'packages_changelog', requirements: ['name' => '%package_name_regex%'], methods: ['GET'])] public function changelog(#[Vars] Package $package, Request $request) { diff --git a/src/Controller/PackageController.php b/src/Controller/PackageController.php index b50934a8..eee6b368 100644 --- a/src/Controller/PackageController.php +++ b/src/Controller/PackageController.php @@ -939,9 +939,14 @@ public function statsAction(Request $req, #[Vars] Package $package): Response } #[Route( - '/packages/{name}/dependents', + '/packages/{name}/dependents.{_format}', name: 'view_package_dependents', - requirements: ['name' => '([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?|ext-[A-Za-z0-9_.-]+?)'], + requirements: [ + 'name' => '([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?|ext-[A-Za-z0-9_.-]+?)', + '_format' => '(json)', + ], + defaults: ['_format' => 'html'], + methods: ['GET'] )] #[IsGranted('ROLE_FULL_CUSTOMER')] public function dependentsAction(Request $req, $name): Response @@ -964,6 +969,14 @@ public function dependentsAction(Request $req, $name): Response $data['meta'] = $this->getPackagesMetadata($data['packages']); $data['name'] = $name; + if ('json' === $req->getRequestFormat()) { + $response = new JsonResponse($data); + $response->setSharedMaxAge(12*3600); + + return $response; + } + + return $this->render('package/dependents.html.twig', $data); } diff --git a/swagger/packages-api.yaml b/swagger/packages-api.yaml index 08be5741..ec42fcf6 100644 --- a/swagger/packages-api.yaml +++ b/swagger/packages-api.yaml @@ -83,6 +83,12 @@ paths: summary: 'Update a package' example: $PackageUpdate <<: *pkg-param + + '/api/packages/{name}/dependents': + get: + tags: [ Packages ] + summary: 'View the dependents of a package' + <<: *pkg-param '/api/packages/{name}/changelog': get: