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: 'page', in: 'query', schema: new OA\Schema(type: 'integer'))]
|
||||||
#[OA\Parameter(name: 'perPage', 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: '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'))]
|
#[OA\Parameter(name: 'search', in: 'query', schema: new OA\Schema(type: 'string'))]
|
||||||
#[Route('/list', name: 'medical_center_list', methods: ['GET'])]
|
#[Route('/list', name: 'medical_center_list', methods: ['GET'])]
|
||||||
public function list(Request $request, MedicalCenterRepository $repository): JsonResponse
|
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, [], [
|
return $this->json($this->paginator->paginate($qb, $request), Response::HTTP_OK, [], [
|
||||||
'groups' => self::READ_GROUPS,
|
'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: 'page', in: 'query', schema: new OA\Schema(type: 'integer'))]
|
||||||
#[OA\Parameter(name: 'perPage', 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: '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'))]
|
#[OA\Parameter(name: 'search', in: 'query', schema: new OA\Schema(type: 'string'))]
|
||||||
#[Route('/list', name: 'news_list', methods: ['GET'])]
|
#[Route('/list', name: 'news_list', methods: ['GET'])]
|
||||||
public function list(Request $request, NewsRepository $repository): JsonResponse
|
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, [], [
|
return $this->json($this->paginator->paginate($qb, $request), Response::HTTP_OK, [], [
|
||||||
'groups' => self::READ_GROUPS,
|
'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: 'page', in: 'query', schema: new OA\Schema(type: 'integer'))]
|
||||||
#[OA\Parameter(name: 'perPage', 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: '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'))]
|
#[OA\Parameter(name: 'search', in: 'query', schema: new OA\Schema(type: 'string'))]
|
||||||
#[Route('/list', name: 'promo_list', methods: ['GET'])]
|
#[Route('/list', name: 'promo_list', methods: ['GET'])]
|
||||||
public function list(Request $request, PromoRepository $repository): JsonResponse
|
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, [], [
|
return $this->json($this->paginator->paginate($qb, $request), Response::HTTP_OK, [], [
|
||||||
'groups' => self::READ_GROUPS,
|
'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: 'page', in: 'query', schema: new OA\Schema(type: 'integer'))]
|
||||||
#[OA\Parameter(name: 'perPage', 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: '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'))]
|
#[OA\Parameter(name: 'search', in: 'query', schema: new OA\Schema(type: 'string'))]
|
||||||
#[Route('/list', name: 'site_service_list', methods: ['GET'])]
|
#[Route('/list', name: 'site_service_list', methods: ['GET'])]
|
||||||
public function list(Request $request, SiteServiceRepository $repository): JsonResponse
|
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, [], [
|
return $this->json($this->paginator->paginate($qb, $request), Response::HTTP_OK, [], [
|
||||||
'groups' => self::READ_GROUPS,
|
'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(
|
return new self(
|
||||||
regionId: self::positiveInt($request->query->get('regionId', $request->query->get('region_id'))),
|
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')),
|
alias: self::nonEmptyString($request->query->get('alias')),
|
||||||
search: self::nonEmptyString($request->query->get('search', $request->query->get('q'))),
|
search: self::nonEmptyString($request->query->get('search', $request->query->get('q'))),
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user