issues/27: Content list filters: restore default active=true; CrudResponder denormalize and legacy...
This commit is contained in:
committed by
Valeriy Petrov
parent
02897a1fdb
commit
7a4fda31a4
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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'))),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user