Remove dynamic form builder and complete RoundProject→roundId migration
Major cleanup and schema migration: - Remove unused dynamic form builder system (ApplicationForm, ApplicationFormField, etc.) - Complete migration from RoundProject junction table to direct Project.roundId - Add sortOrder and entryNotificationType fields to Round model - Add country field to User model for mentor matching - Enhance onboarding with profile photo and country selection steps - Fix all TypeScript errors related to roundProjects references - Remove unused libraries (@radix-ui/react-toast, embla-carousel-react, vaul) Files removed: - admin/forms/* pages and related components - admin/onboarding/* pages - applicationForm.ts and onboarding.ts routers - Dynamic form builder Prisma models and enums Schema changes: - Removed ApplicationForm, ApplicationFormField, OnboardingStep, ApplicationFormSubmission, SubmissionFile models - Removed FormFieldType and SpecialFieldType enums - Added Round.sortOrder, Round.entryNotificationType - Added User.country Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -112,11 +112,11 @@ async function DashboardStats({ editionId, sessionName }: DashboardStatsProps) {
|
||||
where: { programId: editionId },
|
||||
}),
|
||||
prisma.project.count({
|
||||
where: { programId: editionId },
|
||||
where: { round: { programId: editionId } },
|
||||
}),
|
||||
prisma.project.count({
|
||||
where: {
|
||||
programId: editionId,
|
||||
round: { programId: editionId },
|
||||
createdAt: { gte: sevenDaysAgo },
|
||||
},
|
||||
}),
|
||||
@@ -149,7 +149,7 @@ async function DashboardStats({ editionId, sessionName }: DashboardStatsProps) {
|
||||
include: {
|
||||
_count: {
|
||||
select: {
|
||||
roundProjects: true,
|
||||
projects: true,
|
||||
assignments: true,
|
||||
},
|
||||
},
|
||||
@@ -161,7 +161,7 @@ async function DashboardStats({ editionId, sessionName }: DashboardStatsProps) {
|
||||
},
|
||||
}),
|
||||
prisma.project.findMany({
|
||||
where: { programId: editionId },
|
||||
where: { round: { programId: editionId } },
|
||||
orderBy: { createdAt: 'desc' },
|
||||
take: 8,
|
||||
select: {
|
||||
@@ -174,20 +174,18 @@ async function DashboardStats({ editionId, sessionName }: DashboardStatsProps) {
|
||||
logoKey: true,
|
||||
createdAt: true,
|
||||
submittedAt: true,
|
||||
roundProjects: {
|
||||
select: { status: true, round: { select: { name: true } } },
|
||||
take: 1,
|
||||
},
|
||||
status: true,
|
||||
round: { select: { name: true } },
|
||||
},
|
||||
}),
|
||||
prisma.project.groupBy({
|
||||
by: ['competitionCategory'],
|
||||
where: { programId: editionId },
|
||||
where: { round: { programId: editionId } },
|
||||
_count: true,
|
||||
}),
|
||||
prisma.project.groupBy({
|
||||
by: ['oceanIssue'],
|
||||
where: { programId: editionId },
|
||||
where: { round: { programId: editionId } },
|
||||
_count: true,
|
||||
}),
|
||||
])
|
||||
@@ -394,7 +392,7 @@ async function DashboardStats({ editionId, sessionName }: DashboardStatsProps) {
|
||||
</Badge>
|
||||
</div>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
{round._count.roundProjects} projects · {round._count.assignments} assignments
|
||||
{round._count.projects} projects · {round._count.assignments} assignments
|
||||
{round.totalEvals > 0 && (
|
||||
<> · {round.evalPercent}% evaluated</>
|
||||
)}
|
||||
@@ -461,10 +459,10 @@ async function DashboardStats({ editionId, sessionName }: DashboardStatsProps) {
|
||||
{truncate(project.title, 45)}
|
||||
</p>
|
||||
<Badge
|
||||
variant={statusColors[project.roundProjects[0]?.status ?? 'SUBMITTED'] || 'secondary'}
|
||||
variant={statusColors[project.status ?? 'SUBMITTED'] || 'secondary'}
|
||||
className="shrink-0 text-[10px] px-1.5 py-0"
|
||||
>
|
||||
{(project.roundProjects[0]?.status ?? 'SUBMITTED').replace('_', ' ')}
|
||||
{(project.status ?? 'SUBMITTED').replace('_', ' ')}
|
||||
</Badge>
|
||||
</div>
|
||||
<p className="text-xs text-muted-foreground mt-0.5">
|
||||
|
||||
Reference in New Issue
Block a user