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:
@@ -94,16 +94,22 @@ export default function MentorProjectsPage() {
|
||||
<div className="space-y-1">
|
||||
<div className="flex items-center gap-2 text-sm text-muted-foreground">
|
||||
<span>
|
||||
{project.round.program.year} Edition
|
||||
{project.program.year} Edition
|
||||
</span>
|
||||
<span>•</span>
|
||||
<span>{project.round.name}</span>
|
||||
{project.roundProjects?.[0]?.round && (
|
||||
<>
|
||||
<span>•</span>
|
||||
<span>{project.roundProjects[0].round.name}</span>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
<CardTitle className="flex items-center gap-2">
|
||||
{project.title}
|
||||
<Badge variant={statusColors[project.status] || 'secondary'}>
|
||||
{project.status.replace('_', ' ')}
|
||||
</Badge>
|
||||
{project.roundProjects?.[0]?.status && (
|
||||
<Badge variant={statusColors[project.roundProjects[0].status] || 'secondary'}>
|
||||
{project.roundProjects[0].status.replace('_', ' ')}
|
||||
</Badge>
|
||||
)}
|
||||
</CardTitle>
|
||||
{project.teamName && (
|
||||
<CardDescription>{project.teamName}</CardDescription>
|
||||
|
||||
Reference in New Issue
Block a user