feat(ticket): implement DesfileEntryReservationController and related services for ticket reservations
This commit is contained in:
@@ -13,8 +13,8 @@ use App\Domains\Ticketing\Ticket\Models\EntryReservation;
|
||||
use App\Domains\Ticketing\Ticket\Models\ReservationBatch;
|
||||
use App\Domains\Ticketing\Ticket\Models\Ticket;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
@@ -88,7 +88,7 @@ class EntryReservationService
|
||||
* @param list<array{catalog_item_id: int, variant_id?: int|null, tipo_pago: string}> $rows
|
||||
* @return Collection<int, EntryReservation>
|
||||
*/
|
||||
public function reserve(User $user, string $key, array $rows): Collection
|
||||
public function reserve(User $user, string $key, array $rows, ?EntryReservationPolicy $policy = null): Collection
|
||||
{
|
||||
$validated = Validator::make(['idempotency_key' => $key, 'rows' => $rows], [
|
||||
'idempotency_key' => ['required', 'uuid'],
|
||||
@@ -105,7 +105,7 @@ class EntryReservationService
|
||||
], $validated['rows']);
|
||||
$hash = $this->requestHash($rows);
|
||||
|
||||
return DB::transaction(function () use ($user, $key, $rows, $hash): Collection {
|
||||
return DB::transaction(function () use ($user, $key, $rows, $hash, $policy): Collection {
|
||||
User::query()->whereKey($user->id)->lockForUpdate()->firstOrFail();
|
||||
$tenant = $user->tenant()->firstOrFail();
|
||||
$batch = ReservationBatch::query()->where('user_id', $user->id)
|
||||
@@ -183,6 +183,8 @@ class EntryReservationService
|
||||
throw ValidationException::withMessages($errors);
|
||||
}
|
||||
|
||||
$policy?->validate($selections);
|
||||
|
||||
foreach ($requirements as $inventoryId => $requirement) {
|
||||
if ($requirement['tracked'] && $inventories[$inventoryId]->availableStock() < $requirement['quantity']) {
|
||||
foreach ($selections as $index => $selection) {
|
||||
@@ -204,7 +206,7 @@ class EntryReservationService
|
||||
$inventories[$inventoryId]->reserveEntry($requirement['quantity'], $requirement['tracked']);
|
||||
}
|
||||
|
||||
$reservations = collect();
|
||||
$reservations = new Collection;
|
||||
foreach ($selections as $index => $selection) {
|
||||
$item = $selection['item'];
|
||||
$variant = $selection['variant'];
|
||||
|
||||
Reference in New Issue
Block a user