2026-04-10 — Academy: vínculo treinador–arena, horários, vagas, pedidos e convites
Documentação KOLOS

2026-04-10 — Academy: vínculo treinador–arena, horários, vagas, pedidos e convites

O quê

  • BD: venue_coaches; academy_classes.max_members, accepts_enrollment_requests; academy_class_schedule_slots; academy_class_enrollment_requests; academy_class_invitations (token UUID).
  • Regra de negócio: criar/atualizar turma exige treinador associado à arena (EnsureCoachIsActiveOnVenue), exceto super_admin.
  • Horários: SyncAcademyClassScheduleSlotsAction; rótulo automático AcademyScheduleLabelFromSlots se schedule_label vazio.
  • Capacidade: AcademyClass::hasMemberCapacity() / remainingMemberCapacity(); inscrição direta e pedidos respeitam limite.
  • Pedidos: CreateAcademyClassEnrollmentRequestAction, ApproveAcademyClassEnrollmentRequestAction, RejectAcademyClassEnrollmentRequestAction, CancelAcademyClassEnrollmentRequestAction.
  • Convites: InvitePlayerToAcademyClassAction, AcceptAcademyClassInvitationAction, DeclineAcademyClassInvitationAction, mailable PlayerInvitedToAcademyClassMail (fila).
  • Refactor: AttachAcademyClassMemberAction partilhado com AddAcademyClassMemberAction.
  • UI: ManageVenueCoaches (pesquisa treinador por nome/email, estilo roster), TrainingClasses (select de treinadores: nome — email), BrowseAcademyClasses, InvitationRespond, roster com fila de pedidos + convite; MyEnrollments com convites/pedidos; my-venues + sidebar.
  • Policies: AcademyClassPolicy::browseOpenClasses, requestEnrollment; AcademyClassEnrollmentRequestPolicy::cancel; AcademyClassInvitationPolicy::view, accept, decline.

Por quê

Implementar a estratégia em kolos_academy-coach-venue-schedule-requests-strategy.md.

Validação

Atualização 2026-04-11 — Categorias e género da turma

  • Colunas academy_classes.skill_category_codes (JSON, opcional: lista C/B/A) e gender_mode (mixed / male / female, defeito mixed).
  • Enums AcademyClassSkillCategory, AcademyClassGenderMode; CreateAcademyClassData / UpdateAcademyClassData e actions; UI em Turmas na arena, criar turma (treinador), listagens (procurar turmas, minhas turmas).

Impacto

  • Migrações novas — correr php artisan migrate em todos os ambientes.
  • Testes: helper global attachCoachToVenue() em tests/Pest.php para dados mínimos de arena + coach.