Пълният път на една резервация — от избор на свободен час до потвърдено плащане — точно както е имплементиран в контролерите и webhook-а.
Вижда списък с активните услуги на бизнеса.
BookingController@indexСистемата генерира слотове за работния ден (09:00–17:00) и маха вече заетите — изчислено на момента, не кеширано.
BookingController@create — availableSlots()При подаване на формата сървърът прави реална SQL проверка дали часът вече не е зает — предпазва от двойна резервация дори при два едновременни опита.
Booking::scopeOverlapping()Записва се в базата с чакащ статус и се подготвя Stripe Checkout сесия за плащане.
StripeCheckoutService::createSessionForBooking()Клиентът се пренасочва към защитената страница на Stripe за плащане с карта.
Stripe известява сървъра директно (не през браузъра на клиента) — подписът на заявката се проверява, преди резервацията да се маркира като платена.
StripeWebhookController@handleСтраница с детайлите на резервацията — услуга, час, статус.
BookingController@confirmationСлужебен изглед (зад логин + admin проверка) показва всички резервации и позволява смяна на статус — напр. на "завършена" след посещението.
Admin\DashboardControllerWHERE starts_at < ? AND ends_at > ?), не само във фронтенда.Stripe-Signature header.