Added Validation to API requests.
CI / Docker Lint (push) Successful in 21s

- Added Symfony Validation Lib.
- Updated API DTOs to include validation constraints.
This commit is contained in:
2024-10-18 20:32:36 +02:00
parent fbee23c022
commit 37462e4646
11 changed files with 75 additions and 67 deletions
+4 -38
View File
@@ -4,7 +4,6 @@ namespace App\Controller;
use App\ApiErrorException;
use App\DTO\ApiErrorMessage;
use App\Repository\FareTableRepository;
use App\Repository\RoomAvailabilityRepository;
use App\Repository\RoomCategoryRepository;
use App\Request\SearchAvailabilityPeriodRequest;
@@ -14,12 +13,10 @@ use App\Response\SearchPricesForCategoryResponse;
use App\Service\PricesService;
use Nelmio\ApiDocBundle\Annotation\Model;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use OpenApi\Attributes as OA;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Attribute\MapRequestPayload;
use Symfony\Component\HttpKernel\Exception\HttpException;
class SearchRoomsController extends AbstractController
{
@@ -50,15 +47,9 @@ class SearchRoomsController extends AbstractController
)
)]
public function getAvailabilityForPeriod(
Request $request,
RoomAvailabilityRepository $repoAvailability,
#[MapRequestPayload()] SearchAvailabilityPeriodRequest $searchRequest
): Response {
if (\is_null($searchRequest)) {
throw new ApiErrorException(
new ApiErrorMessage(400, ApiErrorMessage::TYPE_INVALID_REQUEST_BODY_FORMAT)
);
}
): JsonResponse {
if ($searchRequest->startDate >= $searchRequest->endDate) {
throw new ApiErrorException(
@@ -78,13 +69,9 @@ class SearchRoomsController extends AbstractController
#[Route('/api/search/availabilityDetails', name: 'app_search_availabilityDetails', methods: ["POST"], format: "json")]
#[OA\Tag(name: "Searchs")]
public function getAvailabilityForPeriodDetails(
Request $request,
RoomAvailabilityRepository $repoAvailability,
#[MapRequestPayload()] SearchAvailabilityPeriodRequest $searchRequest
): Response {
if (\is_null($searchRequest)) {
throw new \Exception('Invalid Payload', 400);
}
): JsonResponse {
$rs = $repoAvailability->getAvailabilityForPeriodDetails($searchRequest->startDate, $searchRequest->endDate);
@@ -119,16 +106,10 @@ class SearchRoomsController extends AbstractController
)
)]
public function getPricesForCategoryOnPeriod(
Request $request,
RoomCategoryRepository $repoCat,
PricesService $priceService,
#[MapRequestPayload()] SearchPricesForCategoryRequest $searchRequest
): Response {
if (\is_null($searchRequest)) {
throw new ApiErrorException(
new ApiErrorMessage(400, ApiErrorMessage::TYPE_INVALID_REQUEST_BODY_FORMAT)
);
}
): JsonResponse {
$roomCategory = $repoCat->find($searchRequest->roomCategory);
if ($roomCategory === null) {
@@ -153,19 +134,4 @@ class SearchRoomsController extends AbstractController
return $this->json(["results" => $rs]);
}
#[Route('/debug/search', name: 'app_search_faresDebug')]
public function faresDebug(Request $request, PricesService $priceService, FareTableRepository $repoFareTable, RoomCategoryRepository $repoCat): Response
{
$fareTable[] = $repoFareTable->find(1);
$fareTable[] = $repoFareTable->find(2);
$cat = $repoCat->find(4);
$startDate = new \DateTime("2024-04-27");
$endDate = new \DateTime("2024-05-02");
$rs = $priceService->getFinalPricesForSearch($cat, $startDate, $endDate);
return $this->json($rs);
}
}