/
ghx
/
TicketFlow
Обзор
Документация
Войти
/
ghx
/
TicketFlow
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
app/Http/Controllers/TicketController.php
58 строк
2 KB
osnov
.
26 июн 2026, 11:56
26 июн 2026, 11:56
dc2de34
Код
Авторство
О чём код?
<?php namespace App\Http\Controllers; use App\Models\Ticket; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class TicketController extends Controller { public function checkout(Request $request) { $validated = $request->validate([ 'payment_method' => 'required|in:card,cash,pushkin', 'receipt_email' => 'nullable|email|max:255', ]); $cart = $request->session()->get('cart', []); if ($cart === []) { return redirect()->route('cart.index')->with('error', 'Корзина пуста.'); } $user = $request->user(); try { DB::transaction(function () use ($cart, $user, $request) { foreach ($cart as $item) { $occupied = Ticket::query() ->where('showtime_id', $item['session_id']) ->where('seat_id', $item['seat_id']) ->whereIn('status', ['reserved', 'paid']) ->lockForUpdate() ->exists(); if ($occupied) { throw new \RuntimeException('Место уже занято. Обновите корзину и выберите другие места.'); } Ticket::create([ 'user_id' => $user->id, 'showtime_id' => $item['session_id'], 'seat_id' => $item['seat_id'], 'price' => $item['price'], 'status' => 'paid', ]); } $request->session()->forget('cart'); }); } catch (\RuntimeException $e) { return redirect()->route('cart.index')->with('error', $e->getMessage()); } return redirect()->route('profile', ['tab' => 'tickets']) ->with('success', 'Заказ успешно оформлен! Билеты доступны в истории покупок.'); } }