Decouple projects from rounds with RoundProject join table
Projects now exist at the program level instead of being locked to a single round. A new RoundProject join table enables many-to-many relationships with per-round status tracking. Rounds have sortOrder for configurable progression paths. - Add RoundProject model, programId on Project, sortOrder on Round - Migration preserves existing data (roundId -> RoundProject entries) - Update all routers to query through RoundProject join - Add assign/remove/advance/reorder round endpoints - Add Assign, Advance, Remove Projects dialogs on round detail page - Add round reorder controls (up/down arrows) on rounds list - Show all rounds on project detail page Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -8,15 +8,15 @@ async function cleanup() {
|
||||
// Find and delete the dummy round
|
||||
const dummyRound = await prisma.round.findFirst({
|
||||
where: { slug: 'round-1-2026' },
|
||||
include: { projects: true }
|
||||
include: { roundProjects: { include: { project: true } } }
|
||||
})
|
||||
|
||||
if (dummyRound) {
|
||||
console.log(`Found dummy round: ${dummyRound.name}`)
|
||||
console.log(`Projects in round: ${dummyRound.projects.length}`)
|
||||
console.log(`Projects in round: ${dummyRound.roundProjects.length}`)
|
||||
|
||||
// Get project IDs to delete
|
||||
const projectIds = dummyRound.projects.map(p => p.id)
|
||||
const projectIds = dummyRound.roundProjects.map(rp => rp.projectId)
|
||||
|
||||
// Delete team members for these projects
|
||||
if (projectIds.length > 0) {
|
||||
@@ -25,11 +25,11 @@ async function cleanup() {
|
||||
})
|
||||
console.log(`Deleted ${teamDeleted.count} team members`)
|
||||
|
||||
// Disconnect projects from round first
|
||||
await prisma.round.update({
|
||||
where: { id: dummyRound.id },
|
||||
data: { projects: { disconnect: projectIds.map(id => ({ id })) } }
|
||||
// Delete round-project associations
|
||||
await prisma.roundProject.deleteMany({
|
||||
where: { roundId: dummyRound.id }
|
||||
})
|
||||
console.log(`Deleted round-project associations`)
|
||||
|
||||
// Delete the projects
|
||||
const projDeleted = await prisma.project.deleteMany({
|
||||
|
||||
Reference in New Issue
Block a user