migration-reference · implemented
Migration 09 — courses
Contrato dos cursos por campus e de seus coordenadores.
Contrato
| Campo | Regra |
|---|---|
id | bigint autoincremental, chave primária. |
campus_id | bigint obrigatório, FK para campuses.id com ON DELETE RESTRICT. |
name | Nome obrigatório, varchar(255). |
primary_coordinator_affiliation_id | bigint nullable, FK para affiliations.id com ON DELETE RESTRICT. |
secondary_coordinator_affiliation_id | bigint nullable, FK para affiliations.id com ON DELETE RESTRICT. |
deactivated_at | Timestamp nullable; nulo significa curso ativo. |
created_at, updated_at | Timestamps convencionais do Laravel. |
O curso pode ser criado sem coordenadores, conforme a decisão para cadastro inicial. Quando atribuídos, os dois vínculos devem ser distintos, ativos, do tipo Coordinator e do mesmo campus do curso. Course valida isso no momento da atribuição, preservando referências históricas se um coordenador for desativado depois. O campus deve estar ativo ao criar, trocar de campus ou reativar o curso. Não há CHECK de domínio nem tabela intermediária de coordenação.
O ciclo do catálogo usa deactivated_at, sem SoftDeletes; FKs impedem exclusão física de campus ou coordenador referenciado. Esta migration não cria índices secundários explícitos; a escolha ficará para uma etapa posterior, com base nas consultas reais. Nomes iguais no mesmo campus não recebem restrição de unicidade nesta migration porque o contrato não distingue modalidades ou ofertas homônimas; eventual regra de catálogo precisará de decisão própria.
Checklist
- Fixar os nomes
primary_coordinator_affiliation_idesecondary_coordinator_affiliation_id. - Criar migration com FKs para
campuseseaffiliations. - Permitir coordenadores nulos durante o cadastro inicial.
- Criar Model
Course, relações e factory. - Validar campus, tipo e escopo dos vínculos coordenadores no Model.
- Testar curso de campus ativo, coordenador de outro campus e vínculo desativado.
- Testar migrate/rollback na ordem completa.