Fluxo de uso — Arena, treinadores, turmas, pedidos e convites (Academy)
Documentação KOLOS

Fluxo de uso — Arena, treinadores, turmas, pedidos e convites (Academy)

Versão alinhada ao código após 2026-04-10.

Papéis

Ator Objetivo neste fluxo
Dono da arena (venue_owner) Associar treinadores à arena; criar/editar turmas (nome, treinador, horários, capacidade, «aceitar pedidos»); arquivar turma
Treinador (coach) Ver turmas atribuídas; roster: aprovar/rejeitar pedidos; inscrever já ou convidar por email; presenças
Atleta (player) Procurar turmas com pedidos ativos; pedir entrada; ver convites e responder; «As minhas aulas»

1) Dono: associar treinadores

  1. Autenticar com conta dono de arena; ator Arena no switcher.
  2. Arenas → escolher arena → Professores.
  3. Introduzir ID do utilizador que já tem papel coachAssociar.
  4. Para remover: Remover (bloqueado se existir turma não arquivada com esse treinador nesta arena).

2) Dono: criar turma com horários e vagas

  1. ArenasTurmas na mesma arena.
  2. Preencher nome, escolher treinador na lista (só aparecem associados em «Professores»).
  3. Opcional: texto de horário; bloco Horários semanais (dia 0–6, HH:MM); capacidade máxima; marcar Aceitar pedidos de entrada.
  4. Criar turma.

3) Atleta: pedir entrada

  1. Ator Atleta; menu Procurar turmas (/academy/browse-classes).
  2. Turmas listadas = não arquivadas + accepts_enrollment_requests.
  3. Com vaga: Pedir entrada (mensagem opcional no topo da página).
  4. Acompanhar estado em As minhas aulas → «Pedidos em análise»; Cancelar pedido se ainda pendente.

4) Treinador: tratar pedidos e convidar

  1. Minhas turmas → turma → Alunos (roster).
  2. Secção Pedidos pendentesAprovar ou Rejeitar (aprovar usa a mesma lógica de inscrição + email de boas-vindas em fila).
  3. Pesquisar atleta → Inscrever já ou Convidar por email (convite com link; mailable em fila).

5) Atleta: responder convite

  1. Email (Mailpit em dev com worker de fila) ou As minhas aulasResponder no convite.
  2. Página /academy/invitations/{token}Aceitar ou Recusar.
  3. Convites expiram à data indicada (aceitar bloqueado após expiração; recusar ainda permitido se pendente).

Decisões de produto fixadas no código

  • Aprovação de pedidos: treinador ou dono (ambos passam em manageStudents).
  • Turma cheia: não há lista de espera; pedido/inscrição bloqueados.
  • Criação de turma continua a ser feita pelo dono (não foi implementado «coach cria turma» nesta entrega).

Comandos Sail (referência)

  • Migrações: vendor/bin/sail artisan migrate
  • Testes: vendor/bin/sail artisan test
  • Fila + Mailpit: worker a correr (ex. Supervisor no contentor Sail ou vendor/bin/sail artisan queue:work)