From 5a9b0d37f903dc614de27d7b329a53d342ca7860 Mon Sep 17 00:00:00 2001 From: Progi1984 Date: Tue, 14 Jan 2025 17:22:20 +0100 Subject: [PATCH] `/reports` : Add pagination (per default) --- src/Controller/ReportController.php | 12 ++++++++++-- src/Repository/ExecutionRepository.php | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 5cfbc46f..16a25731 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -38,6 +38,9 @@ public function reports(Request $request): JsonResponse { $executionFilters = []; $requestParams = $request->query->all(); + $paramPage = $requestParams['page'] ?? 1; + $paramLimit = $requestParams['limit'] ?? 20; + $paramLimit = $paramLimit > 100 ? 100 : $paramLimit; if (isset($requestParams['filter_platform'])) { $executionFilters['platform'] = $requestParams['filter_platform']; @@ -52,7 +55,9 @@ public function reports(Request $request): JsonResponse } $executions = $this->executionRepository->findBy($executionFilters, [ 'start_date' => 'DESC', - ]); + ], $paramLimit, ($paramPage - 1) * $paramLimit); + + $numExecutions = $this->executionRepository->count($executionFilters); $reportListing = []; if (!isset($executionFilters['platform']) && !isset($executionFilters['campaign'])) { @@ -108,7 +113,10 @@ public function reports(Request $request): JsonResponse return ($tm1 < $tm2) ? 1 : (($tm1 > $tm2) ? -1 : 0); }); - return new JsonResponse($reports); + $response = new JsonResponse(['count' => $numExecutions, 'reports' => $reports]); + $response->headers->set('Access-Control-Allow-Origin', '*'); + + return $response; } #[Route('/reports/{idReport}', methods: ['GET'])] diff --git a/src/Repository/ExecutionRepository.php b/src/Repository/ExecutionRepository.php index 5ce36924..5dd67895 100644 --- a/src/Repository/ExecutionRepository.php +++ b/src/Repository/ExecutionRepository.php @@ -124,4 +124,27 @@ public function findAllBetweenDates(string $version, string $startDate, string $ return $qb->getQuery()->getResult(); } + + public function count(array $criteria = []): int + { + $qb = $this->createQueryBuilder('e'); + $qb->select($qb->expr()->count('e')); + if (isset($criteria['platform'])) { + $qb + ->andWhere('e.platform = :platform') + ->setParameter('platform', $criteria['platform']); + } + if (isset($criteria['campaign'])) { + $qb + ->andWhere('e.campaign = :campaign') + ->setParameter('campaign', $criteria['campaign']); + } + if (isset($criteria['version'])) { + $qb + ->andWhere('e.version = :version') + ->setParameter('version', $criteria['version']); + } + + return $qb->getQuery()->getSingleScalarResult(); + } }