From 2be3f9d02f11c73fe338e21ee0af169ff428e1b1 Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 3 Mar 2026 21:36:07 +0100 Subject: [PATCH] fix: add missing seed-team-leads.ts required by docker entrypoint Co-Authored-By: Claude Opus 4.6 --- prisma/seed-team-leads.ts | 52 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 prisma/seed-team-leads.ts diff --git a/prisma/seed-team-leads.ts b/prisma/seed-team-leads.ts new file mode 100644 index 0000000..a1d627f --- /dev/null +++ b/prisma/seed-team-leads.ts @@ -0,0 +1,52 @@ +/** + * Idempotent sync: ensure every project with a submittedByUserId has a + * corresponding TeamMember(LEAD) record. Safe to run on every deploy. + */ + +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + const projects = await prisma.project.findMany({ + where: { submittedByUserId: { not: null } }, + select: { + id: true, + submittedByUserId: true, + teamMembers: { select: { userId: true } }, + }, + }) + + const toCreate: Array<{ projectId: string; userId: string; role: 'LEAD' }> = [] + + for (const project of projects) { + if (!project.submittedByUserId) continue + const alreadyLinked = project.teamMembers.some( + (tm) => tm.userId === project.submittedByUserId + ) + if (!alreadyLinked) { + toCreate.push({ + projectId: project.id, + userId: project.submittedByUserId, + role: 'LEAD', + }) + } + } + + if (toCreate.length > 0) { + await prisma.teamMember.createMany({ + data: toCreate, + skipDuplicates: true, + }) + console.log(`✓ Linked ${toCreate.length} project submitters as TeamMember(LEAD)`) + } else { + console.log('✓ All project submitters already linked — nothing to do') + } +} + +main() + .catch((e) => { + console.error('Team lead sync failed:', e) + process.exit(1) + }) + .finally(() => prisma.$disconnect())