chore: initial import for test contour
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Repository\PriceListRepository;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
use Pagerfanta\Doctrine\ORM\QueryAdapter;
|
||||
use Pagerfanta\Pagerfanta;
|
||||
use OpenApi\Attributes as OA;
|
||||
|
||||
#[Route('/pricelist')]
|
||||
final class PriceListController extends AbstractController
|
||||
{
|
||||
#[OA\Tag(name: 'Услуги и цены')]
|
||||
#[OA\Parameter(
|
||||
name: 'page',
|
||||
in: 'query',
|
||||
description: 'номер станицы',
|
||||
schema: new OA\Schema(type: 'integer')
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: 'perPage',
|
||||
in: 'query',
|
||||
description: 'количество записей',
|
||||
schema: new OA\Schema(type: 'integer')
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: 'filial',
|
||||
in: 'query',
|
||||
description: 'id филиала',
|
||||
schema: new OA\Schema(type: 'integer')
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: 'search',
|
||||
in: 'query',
|
||||
description: 'поиск по названию или коду услуги',
|
||||
schema: new OA\Schema(type: 'string')
|
||||
)]
|
||||
#[Route('/list', name: 'pricelist_read_all', methods: ['GET'])]
|
||||
public function readAll(Request $request, PriceListRepository $repository): JsonResponse
|
||||
{
|
||||
$page = $request->query->getInt('page', 1);
|
||||
$perPage = min($request->query->getInt('perPage', 100), 500);
|
||||
|
||||
$qb = $repository->createFilteredQueryBuilder(
|
||||
$request->query->all()
|
||||
);
|
||||
|
||||
$adapter = new QueryAdapter($qb);
|
||||
$pagerfanta = new Pagerfanta($adapter);
|
||||
$pagerfanta->setMaxPerPage($perPage);
|
||||
$pagerfanta->setCurrentPage($page);
|
||||
$data = $pagerfanta->getCurrentPageResults();
|
||||
$response = [
|
||||
'data' => $data,
|
||||
'pagination' => [
|
||||
'total' => $pagerfanta->getNbResults(),
|
||||
'count' => count($data),
|
||||
'per_page' => $pagerfanta->getMaxPerPage(),
|
||||
'current_page' => $pagerfanta->getCurrentPage(),
|
||||
'total_pages' => $pagerfanta->getNbPages(),
|
||||
'has_previous_page' => $pagerfanta->hasPreviousPage(),
|
||||
'has_next_page' => $pagerfanta->hasNextPage(),
|
||||
],
|
||||
];
|
||||
|
||||
return $this->json($response, Response::HTTP_OK, [], [
|
||||
'groups' => ['pricelist:read']
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user