diff --git a/src/Controller/MedicalCenterController.php b/src/Controller/MedicalCenterController.php index 474a765..111bd43 100644 --- a/src/Controller/MedicalCenterController.php +++ b/src/Controller/MedicalCenterController.php @@ -32,12 +32,12 @@ final class MedicalCenterController extends AbstractController #[OA\Parameter(name: 'page', in: 'query', schema: new OA\Schema(type: 'integer'))] #[OA\Parameter(name: 'perPage', in: 'query', schema: new OA\Schema(type: 'integer'))] #[OA\Parameter(name: 'regionId', in: 'query', schema: new OA\Schema(type: 'integer'))] - #[OA\Parameter(name: 'active', in: 'query', schema: new OA\Schema(type: 'boolean'))] + #[OA\Parameter(name: 'active', description: 'Если не передан — фильтр active=true (как в старом API).', in: 'query', schema: new OA\Schema(type: 'boolean'))] #[OA\Parameter(name: 'search', in: 'query', schema: new OA\Schema(type: 'string'))] #[Route('/list', name: 'medical_center_list', methods: ['GET'])] public function list(Request $request, MedicalCenterRepository $repository): JsonResponse { - $qb = $repository->createFilteredQueryBuilder(ContentFilterDto::fromRequest($request)); + $qb = $repository->createFilteredQueryBuilder(ContentFilterDto::fromRequest($request, true)); return $this->json($this->paginator->paginate($qb, $request), Response::HTTP_OK, [], [ 'groups' => self::READ_GROUPS, diff --git a/src/Controller/NewsController.php b/src/Controller/NewsController.php index 08b29ac..fd9fb10 100644 --- a/src/Controller/NewsController.php +++ b/src/Controller/NewsController.php @@ -32,12 +32,12 @@ final class NewsController extends AbstractController #[OA\Parameter(name: 'page', in: 'query', schema: new OA\Schema(type: 'integer'))] #[OA\Parameter(name: 'perPage', in: 'query', schema: new OA\Schema(type: 'integer'))] #[OA\Parameter(name: 'regionId', in: 'query', schema: new OA\Schema(type: 'integer'))] - #[OA\Parameter(name: 'active', in: 'query', schema: new OA\Schema(type: 'boolean'))] + #[OA\Parameter(name: 'active', description: 'Если не передан — фильтр active=true (как в старом API).', in: 'query', schema: new OA\Schema(type: 'boolean'))] #[OA\Parameter(name: 'search', in: 'query', schema: new OA\Schema(type: 'string'))] #[Route('/list', name: 'news_list', methods: ['GET'])] public function list(Request $request, NewsRepository $repository): JsonResponse { - $qb = $repository->createFilteredQueryBuilder(ContentFilterDto::fromRequest($request)); + $qb = $repository->createFilteredQueryBuilder(ContentFilterDto::fromRequest($request, true)); return $this->json($this->paginator->paginate($qb, $request), Response::HTTP_OK, [], [ 'groups' => self::READ_GROUPS, diff --git a/src/Controller/PromoController.php b/src/Controller/PromoController.php index ba95aad..48aafdd 100644 --- a/src/Controller/PromoController.php +++ b/src/Controller/PromoController.php @@ -32,12 +32,12 @@ final class PromoController extends AbstractController #[OA\Parameter(name: 'page', in: 'query', schema: new OA\Schema(type: 'integer'))] #[OA\Parameter(name: 'perPage', in: 'query', schema: new OA\Schema(type: 'integer'))] #[OA\Parameter(name: 'regionId', in: 'query', schema: new OA\Schema(type: 'integer'))] - #[OA\Parameter(name: 'active', in: 'query', schema: new OA\Schema(type: 'boolean'))] + #[OA\Parameter(name: 'active', description: 'Если не передан — фильтр active=true (как в старом API).', in: 'query', schema: new OA\Schema(type: 'boolean'))] #[OA\Parameter(name: 'search', in: 'query', schema: new OA\Schema(type: 'string'))] #[Route('/list', name: 'promo_list', methods: ['GET'])] public function list(Request $request, PromoRepository $repository): JsonResponse { - $qb = $repository->createFilteredQueryBuilder(ContentFilterDto::fromRequest($request)); + $qb = $repository->createFilteredQueryBuilder(ContentFilterDto::fromRequest($request, true)); return $this->json($this->paginator->paginate($qb, $request), Response::HTTP_OK, [], [ 'groups' => self::READ_GROUPS, diff --git a/src/Controller/SiteServiceController.php b/src/Controller/SiteServiceController.php index 32a232f..5443153 100644 --- a/src/Controller/SiteServiceController.php +++ b/src/Controller/SiteServiceController.php @@ -32,12 +32,12 @@ final class SiteServiceController extends AbstractController #[OA\Parameter(name: 'page', in: 'query', schema: new OA\Schema(type: 'integer'))] #[OA\Parameter(name: 'perPage', in: 'query', schema: new OA\Schema(type: 'integer'))] #[OA\Parameter(name: 'regionId', in: 'query', schema: new OA\Schema(type: 'integer'))] - #[OA\Parameter(name: 'active', in: 'query', schema: new OA\Schema(type: 'boolean'))] + #[OA\Parameter(name: 'active', description: 'Если не передан — фильтр active=true (как в старом API).', in: 'query', schema: new OA\Schema(type: 'boolean'))] #[OA\Parameter(name: 'search', in: 'query', schema: new OA\Schema(type: 'string'))] #[Route('/list', name: 'site_service_list', methods: ['GET'])] public function list(Request $request, SiteServiceRepository $repository): JsonResponse { - $qb = $repository->createFilteredQueryBuilder(ContentFilterDto::fromRequest($request)); + $qb = $repository->createFilteredQueryBuilder(ContentFilterDto::fromRequest($request, true)); return $this->json($this->paginator->paginate($qb, $request), Response::HTTP_OK, [], [ 'groups' => self::READ_GROUPS, diff --git a/src/Dto/Content/ContentFilterDto.php b/src/Dto/Content/ContentFilterDto.php index 8cb53cb..f63c6cf 100644 --- a/src/Dto/Content/ContentFilterDto.php +++ b/src/Dto/Content/ContentFilterDto.php @@ -16,11 +16,19 @@ final readonly class ContentFilterDto ) { } - public static function fromRequest(Request $request): self + /** + * @param ?bool $defaultActive если задан (например, true), подставляется, + * когда query-параметр `active` отсутствует или пустой. + * Легаси: в старых list-эндпоинтах News/Promo/MedicalCenter/SiteService + * при отсутствии `active` подразумевалось active = true. + */ + public static function fromRequest(Request $request, ?bool $defaultActive = null): self { + $active = self::nullableBool($request->query->get('active')); + return new self( regionId: self::positiveInt($request->query->get('regionId', $request->query->get('region_id'))), - active: self::nullableBool($request->query->get('active')), + active: $active ?? $defaultActive, alias: self::nonEmptyString($request->query->get('alias')), search: self::nonEmptyString($request->query->get('search', $request->query->get('q'))), );