SGEProduto · Domínio · Desenvolvimento
Repositório

migration-reference · implemented

Migration 10 — course_id em affiliations

Adiciona o curso obrigatório ao vínculo de discente sem criar ciclo de FK.

Contrato

course_id é bigint nullable, FK para courses.id com ON DELETE RESTRICT. AffiliationValidationRules exige o campo para AffiliationType::Student e o proíbe para os demais tipos. O curso escolhido deve pertencer ao mesmo campus do vínculo e estar ativo na atribuição ou reativação. Uma desativação posterior do curso não apaga o vínculo histórico nem bloqueia alterações que não mudem sua associação. Cada curso adicional da mesma conta exige outro vínculo de discente. A Migration 04 não contém essa FK porque courses precisa ser criada antes; não há CHECK de domínio nem índice secundário explícito nesta etapa.

Checklist

  • Adicionar coluna course_id e adiar índice secundário para análise das consultas reais.
  • Restringir a exclusão física do curso referenciado.
  • Aplicar obrigatoriedade condicional e coerência de campus no Model, sem CHECK de domínio.
  • Atualizar Model Affiliation e relação com Course.
  • Atualizar factory com vínculo discente por curso.
  • Testar discente sem curso, servidor com curso indevido e dois cursos para a mesma pessoa.
  • Testar escopo: curso e vínculo devem pertencer ao mesmo campus.
  • Testar migrate/rollback na ordem completa.

Dependências