forked from Somnia/SomniaRooms
API - Search Prices:
- Added endpoint to get prices for all RoomCategories. - Improvements to Prices API.
This commit is contained in:
@@ -6,10 +6,11 @@ use App\ApiErrorException;
|
||||
use App\DTO\ApiErrorMessage;
|
||||
use App\Repository\RoomAvailabilityRepository;
|
||||
use App\Repository\RoomCategoryRepository;
|
||||
use App\Request\SearchAvailabilityPeriodRequest;
|
||||
use App\Request\SearchPeriodRequest;
|
||||
use App\Response\SearchAvailabilityResponse;
|
||||
use App\Request\SearchPricesForCategoryRequest;
|
||||
use App\Response\SearchPricesForCategoryResponse;
|
||||
use App\Response\SearchPricesResponse;
|
||||
use App\Response\SearchPricesResponsePriceItem;
|
||||
use App\Service\PricesService;
|
||||
use Nelmio\ApiDocBundle\Annotation\Model;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
@@ -43,12 +44,12 @@ class SearchRoomsController extends AbstractController
|
||||
#[OA\RequestBody(
|
||||
content: new OA\JsonContent(
|
||||
type: 'object',
|
||||
ref: new Model(type: SearchAvailabilityPeriodRequest::class),
|
||||
ref: new Model(type: SearchPeriodRequest::class),
|
||||
)
|
||||
)]
|
||||
public function getAvailabilityForPeriod(
|
||||
RoomAvailabilityRepository $repoAvailability,
|
||||
#[MapRequestPayload()] SearchAvailabilityPeriodRequest $searchRequest
|
||||
#[MapRequestPayload()] SearchPeriodRequest $searchRequest
|
||||
): JsonResponse {
|
||||
|
||||
if ($searchRequest->startDate >= $searchRequest->endDate) {
|
||||
@@ -63,17 +64,43 @@ class SearchRoomsController extends AbstractController
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Availability for all rooms on each day of a period.
|
||||
* (Not used on Front-end APP)
|
||||
* Get the price of each room on each day of a period.
|
||||
*
|
||||
*/
|
||||
#[Route('/api/search/availabilityDetails', name: 'app_search_availabilityDetails', methods: ["POST"], format: "json")]
|
||||
#[Route('/api/search/prices', name: 'app_search_prices', methods: ["POST"], format: "json")]
|
||||
#[OA\Tag(name: "Searchs")]
|
||||
public function getAvailabilityForPeriodDetails(
|
||||
RoomAvailabilityRepository $repoAvailability,
|
||||
#[MapRequestPayload()] SearchAvailabilityPeriodRequest $searchRequest
|
||||
#[OA\RequestBody(
|
||||
content: new OA\JsonContent(
|
||||
type: 'object',
|
||||
ref: new Model(type: SearchPeriodRequest::class),
|
||||
)
|
||||
)]
|
||||
#[OA\Response(
|
||||
response: 200,
|
||||
description: 'Total Prices for the period of each room',
|
||||
content: new OA\JsonContent(
|
||||
type: 'object',
|
||||
properties: [
|
||||
new OA\Property(
|
||||
property: "results",
|
||||
type: "array",
|
||||
items: new OA\Items(ref: new Model(type: SearchPricesResponse::class))
|
||||
)
|
||||
]
|
||||
)
|
||||
)]
|
||||
public function getPricesForPeriod(
|
||||
PricesService $priceService,
|
||||
#[MapRequestPayload()] SearchPeriodRequest $searchRequest
|
||||
): JsonResponse {
|
||||
if ($searchRequest->startDate >= $searchRequest->endDate) {
|
||||
throw new ApiErrorException(
|
||||
new ApiErrorMessage(422, ApiErrorMessage::TYPE_INVALID_DATE),
|
||||
'startDate cant be before endDate',
|
||||
);
|
||||
}
|
||||
|
||||
$rs = $repoAvailability->getAvailabilityForPeriodDetails($searchRequest->startDate, $searchRequest->endDate);
|
||||
$rs = $priceService->getRoomSearch($searchRequest->startDate, $searchRequest->endDate);
|
||||
|
||||
return $this->json(["results" => $rs]);
|
||||
}
|
||||
@@ -83,7 +110,7 @@ class SearchRoomsController extends AbstractController
|
||||
* Returns price for a room category.
|
||||
* This price is the total for all the selected days by guest number.
|
||||
*/
|
||||
#[Route('/api/search/prices', name: 'app_search_pricesForCategory', methods: ["POST"], format: "json")]
|
||||
#[Route('/api/search/pricesCategory', name: 'app_search_pricesForCategory', methods: ["POST"], format: "json")]
|
||||
#[OA\Tag(name: "Searchs")]
|
||||
#[OA\Response(
|
||||
response: 200,
|
||||
@@ -94,7 +121,7 @@ class SearchRoomsController extends AbstractController
|
||||
new OA\Property(
|
||||
property: "results",
|
||||
type: "array",
|
||||
items: new OA\Items(ref: new Model(type: SearchPricesForCategoryResponse::class))
|
||||
items: new OA\Items(ref: new Model(type: SearchPricesResponsePriceItem::class))
|
||||
)
|
||||
]
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user