Criar ou alterar modelos no banco de dados deste projeto. Use quando: novo modelo, nova coluna, novo relacionamento, novo enum, criar migration Prisma, alterar schema.prisma, adicionar índice, modificar tabela existente.
Adiciona ou modifica modelos no banco PostgreSQL seguindo as convenções obrigatórias
do backend/prisma/schema.prisma deste projeto.
backend/prisma/schema.prismaIDs sempre UUID:
id String @id @default(uuid())
Timestamps em todo modelo:
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
Relacionamentos sempre com onDelete: Cascade quando o filho não faz sentido sem o pai:
companyId String
company Company @relation(fields: [companyId], references: [id], onDelete: Cascade)
Enums para status e tipos tipados (nunca string livre para estados finitos):
enum <Nome>Status {
PENDING
PROCESSING
DONE
FAILED
}
Índices em colunas de filtro frequente:
@@index([companyId])
@@index([companyId, category]) // índice composto para filtros combinados
enum JobStatus { PENDING, PROCESSING, DONE, FAILED }
enum ContentType { IMAGE, REEL, STORY }
enum MediaType { IMAGE, VIDEO, LOGO }
enum StrategyApprovalStatus { PENDING_APPROVAL, APPROVED, REJECTED }
model <NomeModelo> {
id String @id @default(uuid())
// --- campos obrigatórios do domínio ---
name String
status JobStatus @default(PENDING)
metadata Json? // dados flexíveis: usar Json?, não String serializado
// --- timestamps ---
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// --- relacionamentos ---
companyId String
company Company @relation(fields: [companyId], references: [id], onDelete: Cascade)
// --- índices ---
@@index([companyId])
}
Todo modelo vinculado a uma empresa deve ter a relação inversa declarada em Company:
model Company {
// ...campos existentes...
<nomeModelos> <NomeModelo>[]
}
Editar backend/prisma/schema.prisma com o novo modelo/campo seguindo as convenções acima.
cd backend
npx prisma migrate dev --name <descricao_curta>
Convenção de nomes para --name:
add_<modelo> — novo modeloadd_<campo>_to_<modelo> — novo campoadd_<nome>_index — novo índicenpx prisma generate
(Executado automaticamente pelo migrate dev, mas necessário em CI/CD.)
Se o modelo for exposto via API, criar/atualizar a interface correspondente no service:
// services/<recurso>.service.ts
export interface <Recurso>Response {
id: string;
// campos que o frontend vai receber (nunca expor campos sensíveis)
createdAt: Date;
}
String @id @default(uuid())createdAt + updatedAt presentesonDelete: Cascade em todos os @relation de dependentes@@index nas colunas de filtro (companyId, combinações frequentes)Company)prisma migrate dev --name <descricao> executadoNunca retornar nas respostas da API:
password (campo de User)Usar select explícito no Prisma ou mapear para interface de response.