86 lines
3.0 KiB
PHP
86 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Ticketing\Desfile\Controllers;
|
|
|
|
use App\Domains\Ticketing\Desfile\Requests\ExportEntryReservationsRequest;
|
|
use App\Domains\Ticketing\Desfile\Requests\IndexEntryReservationsRequest;
|
|
use App\Domains\Ticketing\Desfile\Requests\StoreEntryReservationsRequest;
|
|
use App\Domains\Ticketing\Desfile\Resources\EntryReservationResource;
|
|
use App\Domains\Ticketing\Desfile\Services\EntryReservationExcelService;
|
|
use App\Domains\Ticketing\Desfile\Services\EntryReservationPdfService;
|
|
use App\Domains\Ticketing\Desfile\Services\EntryReservationService;
|
|
use App\Domains\Ticketing\Ticket\Services\TicketPdfService;
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
|
use Illuminate\Http\Response;
|
|
use Symfony\Component\HttpFoundation\StreamedResponse;
|
|
|
|
class EntryReservationController extends Controller
|
|
{
|
|
public function index(IndexEntryReservationsRequest $request, EntryReservationService $service): AnonymousResourceCollection
|
|
{
|
|
return EntryReservationResource::collection(
|
|
$service->reservations($request->user(), $request->validated()),
|
|
);
|
|
}
|
|
|
|
public function downloadPdf(
|
|
ExportEntryReservationsRequest $request,
|
|
EntryReservationService $service,
|
|
EntryReservationPdfService $pdf,
|
|
): Response {
|
|
$user = $request->user();
|
|
|
|
return $pdf->download(
|
|
$user->tenant()->firstOrFail(),
|
|
$service->reservationsForExport($user, $request->validated()),
|
|
$request->validated('timezone'),
|
|
);
|
|
}
|
|
|
|
public function downloadExcel(
|
|
ExportEntryReservationsRequest $request,
|
|
EntryReservationService $service,
|
|
EntryReservationExcelService $excel,
|
|
): StreamedResponse {
|
|
$user = $request->user();
|
|
|
|
return $excel->download(
|
|
$user->tenant()->firstOrFail(),
|
|
$service->reservationsForExport($user, $request->validated()),
|
|
$request->validated('timezone'),
|
|
);
|
|
}
|
|
|
|
public function downloadTicketPdf(
|
|
IndexEntryReservationsRequest $request,
|
|
int $reservation,
|
|
EntryReservationService $service,
|
|
TicketPdfService $pdf,
|
|
): Response {
|
|
$user = $request->user();
|
|
|
|
return $pdf->download(
|
|
$user->tenant()->firstOrFail(),
|
|
collect([$service->reservationTicket($user, $reservation)]),
|
|
);
|
|
}
|
|
|
|
public function store(StoreEntryReservationsRequest $request, EntryReservationService $service): AnonymousResourceCollection
|
|
{
|
|
return EntryReservationResource::collection($service->reserve(
|
|
$request->user(), $request->validated('idempotency_key'), $request->validated('rows'),
|
|
));
|
|
}
|
|
|
|
public function destroy(
|
|
IndexEntryReservationsRequest $request,
|
|
int $reservation,
|
|
EntryReservationService $service,
|
|
): Response {
|
|
$service->cancel($request->user(), $reservation);
|
|
|
|
return response()->noContent();
|
|
}
|
|
}
|