SGEProduto · Domínio · Desenvolvimento
Repositório

migration-reference · implemented

Migration 09 — courses

Contrato dos cursos por campus e de seus coordenadores.

Contrato

CampoRegra
idbigint autoincremental, chave primária.
campus_idbigint obrigatório, FK para campuses.id com ON DELETE RESTRICT.
nameNome obrigatório, varchar(255).
primary_coordinator_affiliation_idbigint nullable, FK para affiliations.id com ON DELETE RESTRICT.
secondary_coordinator_affiliation_idbigint nullable, FK para affiliations.id com ON DELETE RESTRICT.
deactivated_atTimestamp nullable; nulo significa curso ativo.
created_at, updated_atTimestamps 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_id e secondary_coordinator_affiliation_id.
  • Criar migration com FKs para campuses e affiliations.
  • 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.

Dependências