2026-01-18_booking-onda-3-1-foundation
Documentação KOLOS

2026-01-18_booking-onda-3-1-foundation

🧭 Contexto

A Onda 3.1 (Booking) precisa de uma base mínima confiável para criar reservas de quadras:

  • Modelo Booking com starts_at/ends_at.
  • Prevenção de conflito (double booking) na mesma quadra.
  • UI mínima para criação e listagem por dia.

✅ Decisão

  • Criar o módulo Booking com:
    • Enums (BookingType, BookingStatus).
    • Model Booking e CreateBookingAction como ponto único de escrita.
    • BookingConflictException para feedback amigável e testes explícitos.
  • Garantir integridade de conflitos em dois níveis:
    • Nível aplicação: checagem de overlap no CreateBookingAction (funciona também em testes com SQLite).
    • Nível banco (PostgreSQL): EXCLUDE USING gist com tstzrange('[)') para impedir overlap por constraint.

🛠️ Passos (comandos via Sail)

  • sail artisan migrate
  • sail artisan test --filter CreateBookingActionTest

🧪 Validação

  • Criar booking em uma quadra ativa funciona.
  • Overlap na mesma quadra gera BookingConflictException.
  • Mesmo horário em quadras diferentes é permitido.

🔐 Rotas e acesso

  • GET /booking (booking)
    • Middlewares: auth + role:player

📦 Impacto

  • Novo: migration create_bookings_table com constraint de exclusão para PostgreSQL.
  • Novo: src/Modules/Booking/* (enums, model, DTO, action, exception).
  • Atualizado: UI app/Livewire/Booking.php + view resources/views/livewire/booking.blade.php.
  • Novo: teste tests/Feature/Booking/CreateBookingActionTest.php.