Construindo uma Ferramenta de Gerenciamento de Projetos com Prisma
Estou construindo uma ferramenta de gerenciamento de projetos colaborativa como o Trello. Estou usando React, Express.js, PostgreSQL e Socket.io.
O primeiro passo é o esquema do banco de dados. Desenhei seis modelos para lidar com usuários, projetos, quadros (boards), tarefas, comentários e notificações.
Aqui estão as principais escolhas técnicas e lições do meu design de esquema Prisma:
• Use CUID para IDs
Uso @default(cuid()) para todos os IDs. Eles são melhores do que números simples para URLs públicas. Eles evitam que as pessoas adivinhem quantos registros você tem.
• Nomes de Relação Explícitos
Quando dois campos apontam para o mesmo modelo, o Prisma fica confuso. Por exemplo, uma tarefa tem um criador e um responsável (assignee). Ambos são Users. Devo nomear essas relações explicitamente usando nomes @relation para evitar erros de migração.
• Tabelas de Junção para Relações Muitos-para-Muitos
Um usuário pode pertencer a muitos projetos. Um projeto pode ter muitos usuários. Criei um modelo ProjectMember para vinculá-los. Adicionei uma restrição de unicidade em userId e projectId. Isso evita que o mesmo usuário entre em um projeto duas vezes.
• Hierarquia e Lógica
As tarefas não vivem em projetos. Elas vivem em quadros (boards). Os quadros vivem em projetos. Isso torna o drag-and-drop simples. Para mover uma tarefa, você só precisa atualizar o seu boardId.
• Relações Anuláveis
Algumas relações são obrigatórias e outras são opcionais. Uma tarefa deve ter um criador, por isso não uso um ponto de interrogação. Um responsável (assignee) é opcional, então uso User? e String?. Você deve incluir ambos para que o esquema funcione.
Erros comuns que encontrei:
- Usar aspas simples para valores padrão (defaults). O Prisma exige aspas duplas.
- Esquecer os dois-pontos na sintaxe de referências.
- Aplicar
@default(now())a um campo de ID por engano.
Em seguida, vou construir o backend em Express e configurar o Socket.io para atualizações em tempo real.