Construindo um Backend de Gerenciamento de Projetos

Estou construindo uma ferramenta colaborativa de gerenciamento de projetos para o meu estágio na CodeAlpha.

Funciona como um Trello ou Asana simplificado. Os usuários criam projetos, convidam membros e movem tarefas entre quadros. Utilizo Express.js, Prisma e Socket.io para alimentá-lo.

Aqui estão as lições técnicas que aprendi enquanto construía o backend.

Gerenciando Relacionamentos de Dados

Usuários e projetos possuem um relacionamento muitos-para-muitos (many-to-many). Utilizo uma tabela ProjectMember para conectá-los. Esta tabela armazena dados extras, como a função (role) do usuário.

Adicionei uma restrição de unicidade (unique constraint) a esta tabela. Isso garante que um usuário apareça apenas uma vez por projeto. Também cria uma chave composta para buscas rápidas.

Para o quadro Kanban, mantive as coisas simples. O status de uma tarefa é definido pelo quadro ao qual ela pertence. Mover uma tarefa de "To Do" para "Done" é apenas uma questão de atualizar o seu board ID.

Erros de Arquitetura

Aprendi uma lição difícil sobre conexões de banco de dados. Não crie um novo PrismaClient em cada arquivo de rota. Isso cria conexões demais e derruba sua aplicação.

Em vez disso, crie uma instância compartilhada em um único arquivo. Importe essa mesma instância em cada rota. Isso mantém seu pool de conexões estável.

Autorização e Segurança

Utilizo um middleware protect para proteger as rotas. Ele verifica o JWT no cabeçalho Authorization.

Utilizo optional chaining ao ler os cabeçalhos. Isso evita que o app trave caso um cabeçalho esteja ausente.

Para este projeto, utilizo um token de acesso de 7 dias. Embora aplicativos em produção utilizem tokens de curta duração e refresh tokens, um token de longa duração funciona bem para este escopo específico.

Integridade de Dados com Transações

Criar um projeto requer três etapas:

  • Criar o registro do projeto
  • Atribuir o proprietário
  • Criar os quadros padrão

Se uma etapa falhar, seus dados podem ficar corrompidos. Utilizo prisma.$transaction para envolver essas etapas. Se qualquer parte falhar, todo o processo sofre rollback. Isso mantém seu banco de dados limpo.

Common Logic Errors

Encontrei dois bugs comuns:

  1. Arrays de Relação: Quando você inclui relações em uma consulta, o Prisma retorna um array. Você não pode acessar uma propriedade diretamente na relação. Você deve primeiro selecionar o primeiro item do array.

  2. Ordem das Rotas: O Express processa as rotas de cima para baixo. Se você colocar uma rota com um parâmetro antes de uma rota específica, o Express fará a correspondência com a errada. Sempre coloque rotas específicas acima de rotas parametrizadas.

Esses padrões de backend agora fazem parte do meu fluxo de trabalho.

Fonte: https://dev.to/chinwuba_jeffrey/building-the-backend-for-a-project-management-tool-express-prisma-and-the-mistakes-i-made-along-5gia