← обратно към портфолиото
📐 Диаграма на реалния flow, по кода в репото

Как работи резервацията

Пълният път на една резервация — от избор на свободен час до потвърдено плащане — точно както е имплементиран в контролерите и webhook-а.

Клиент Система / персонал
1

Избира услуга

Вижда списък с активните услуги на бизнеса.

BookingController@index
2

Избира свободен час

Системата генерира слотове за работния ден (09:00–17:00) и маха вече заетите — изчислено на момента, не кеширано.

BookingController@create — availableSlots()
3

Проверка за застъпване

При подаване на формата сървърът прави реална SQL проверка дали часът вече не е зает — предпазва от двойна резервация дори при два едновременни опита.

Booking::scopeOverlapping()
4

Резервацията се създава като "pending"

Записва се в базата с чакащ статус и се подготвя Stripe Checkout сесия за плащане.

StripeCheckoutService::createSessionForBooking()
5

Плаща през Stripe Checkout

Клиентът се пренасочва към защитената страница на Stripe за плащане с карта.

6

Webhook потвърждава плащането

Stripe известява сървъра директно (не през браузъра на клиента) — подписът на заявката се проверява, преди резервацията да се маркира като платена.

StripeWebhookController@handle
7

Вижда потвърждение

Страница с детайлите на резервацията — услуга, час, статус.

BookingController@confirmation
8

Персоналът управлява от админ табло

Служебен изглед (зад логин + admin проверка) показва всички резервации и позволява смяна на статус — напр. на "завършена" след посещението.

Admin\DashboardController

Технически детайли