2026-04-09 — Academy: persistência, policies e UI dono da arena
Documentação KOLOS

2026-04-09 — Academy: persistência, policies e UI dono da arena

O quê

  • Migrations academy_classes e academy_class_members (chave composta no pivot, sem UUID artificial — compatível com attach/syncWithoutDetaching).
  • Model Kolos\Modules\Academy\Models\AcademyClass; relação Venue::academyClasses().
  • Permissão academy.class.create atribuída a venue_owner; VenuePolicy::manageAcademy.
  • AcademyClassPolicy (view, manageStudents) + registo em AuthServiceProvider.
  • Actions/DTOs: criar turma, adicionar membro; validação de papel coach no treinador designado.
  • Livewire Venue\TrainingClasses em /venues/{venue}/training-classes; botão «Turmas» em my-venues.
  • Lista de turmas do coach e roster passam a usar Eloquent; roster em rota autenticada com policy (não exige middleware coach).
  • Factories VenueFactory, AcademyClassFactory; removido catálogo demo estático.

Por quê

Fase C do plano Academy: dados reais, escopo por arena/treinador, alinhado à matriz ACL (dono cria turma; treinador gere alunos).

Migração local

Se já tinha corrido a migration anterior com id UUID no pivot: vendor/bin/sail artisan migrate:fresh (ou rollback manual da migration Academy + re-run) em ambientes de dev.

Validação

  • vendor/bin/sail artisan test
  • Dono: Arenas → Turmas → criar turma (ID de user com role coach); abrir «Alunos» na lista.
  • Treinador: contexto coach → Minhas turmas → Ver alunos.