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:
@@ -38,7 +38,8 @@ import {
|
||||
import { cn } from '@/lib/utils'
|
||||
|
||||
interface CSVImportFormProps {
|
||||
roundId: string
|
||||
programId: string
|
||||
roundId?: string
|
||||
roundName: string
|
||||
onSuccess?: () => void
|
||||
}
|
||||
@@ -72,7 +73,7 @@ interface MappedProject {
|
||||
metadataJson?: Record<string, unknown>
|
||||
}
|
||||
|
||||
export function CSVImportForm({ roundId, roundName, onSuccess }: CSVImportFormProps) {
|
||||
export function CSVImportForm({ programId, roundId, roundName, onSuccess }: CSVImportFormProps) {
|
||||
const router = useRouter()
|
||||
const [step, setStep] = useState<Step>('upload')
|
||||
const [file, setFile] = useState<File | null>(null)
|
||||
@@ -224,6 +225,7 @@ export function CSVImportForm({ roundId, roundName, onSuccess }: CSVImportFormPr
|
||||
|
||||
try {
|
||||
await importMutation.mutateAsync({
|
||||
programId,
|
||||
roundId,
|
||||
projects: valid,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user