All checks were successful
Build and Push Docker Image / build (push) Successful in 8m58s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
/**
|
|
* 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())
|