Aplicación starter

Función de reservas

Activa reservas opt-in con bloqueos seguros, checkout Stripe, email y calendarios.

Sincronizado con el commit 7d452a6 del starter.

Reservas está desactivado por defecto. Activa NEXT_PUBLIC_FEATURE_RESERVATIONS_ENABLED=true solo tras definir catálogo, zona IANA, horario, precio/depósito, webhook Stripe y email en src/config/reservations.ts. El auto-seed demo también está apagado y no debe usarse en producción.

Flujo: GET /api/reservations/services, POST /api/reservations/availability, POST /api/reservations idempotente y GET /api/reservations/mine. UI: /:locale/reserve y /:locale/account/reservations.

Checkout crea bajo lock un hold de 35 minutos y una sesión Stripe; la misma Idempotency-Key se reproduce con seguridad. Advisory lock y restricción de exclusión impiden solapes. Solo el webhook verificado confirma pago; la página de retorno no. La expiración libera únicamente el hold de esa sesión.

La confirmación encola email con ICS y enlace Google Calendar. Prueba concurrencia, duplicados, abandono, pago tardío, zona/DST, depósito/pago total, reintentos y aislamiento.

Función de reservas · Sushi SaaS