Construyendo una herramienta de gestión de proyectos con Prisma
Estoy construyendo una herramienta de gestión de proyectos colaborativa como Trello. Estoy utilizando React, Express.js, PostgreSQL y Socket.io.
El primer paso es el esquema de la base de datos. Diseñé seis modelos para gestionar usuarios, proyectos, tableros, tareas, comentarios y notificaciones.
Estas son las decisiones técnicas clave y las lecciones de mi diseño de esquema con Prisma:
• Usar CUID para los IDs
Uso @default(cuid()) para todos los IDs. Estos son mejores que los números simples para las URLs públicas. Evitan que la gente adivine cuántos registros tienes.
• Nombres de relación explícitos
Cuando dos campos apuntan al mismo modelo, Prisma se confunde. Por ejemplo, una tarea tiene un creador y un asignado. Ambos son Users. Debo nombrar estas relaciones explícitamente usando nombres @relation para evitar errores de migración.
• Tablas de unión para relaciones muchos a muchos
Un usuario puede pertenecer a muchos proyectos. Un proyecto puede tener muchos usuarios. Creé un modelo ProjectMember para vincularlos. Añadí una restricción única en userId y projectId. Esto evita que el mismo usuario se una a un proyecto dos veces.
• Jerarquía y lógica
Las tareas no viven en los proyectos. Viven en los tableros. Los tableros viven en los proyectos. Esto hace que el "arrastrar y soltar" sea sencillo. Para mover una tarea, solo tienes que actualizar su boardId.
• Relaciones anulables
Algunas relaciones son obligatorias y otras son opcionales. Una tarea debe tener un creador, por lo que no uso un signo de interrogación. Un asignado es opcional, así que uso User? y String?. Debes incluir ambos para que el esquema funcione.
Errores comunes que encontré:
- Usar comillas simples para los valores por defecto. Prisma requiere comillas dobles.
- Olvidar los dos puntos en la sintaxis de referencias.
- Aplicar
@default(now())a un campo de ID por error.
A continuación, construiré el backend con Express y configuraré Socket.io para actualizaciones en tiempo real.