refactor: tech debt batch 3 — type safety + assignment router split
All checks were successful
Build and Push Docker Image / build (push) Successful in 13m4s
All checks were successful
Build and Push Docker Image / build (push) Successful in 13m4s
#5 — Replaced 55x PrismaClient | any with proper Prisma types across 8 files - Service files: PrismaClient | any → PrismaClient, tx: any → Prisma.TransactionClient - Fixed 4 real bugs uncovered by typing: - mentor-workspace.ts: wrong FK fields (mentorAssignmentId → workspaceId, role → senderRole) - ai-shortlist.ts: untyped string passed to CompetitionCategory enum filter - result-lock.ts: unknown passed where Prisma.InputJsonValue required #9 — Split assignment.ts (2,775 lines) into 6 focused files: - shared.ts (93 lines) — MOVABLE_EVAL_STATUSES, buildBatchNotifications, getCandidateJurors - assignment-crud.ts (473 lines) — 8 core CRUD procedures - assignment-suggestions.ts (880 lines) — AI suggestions + job runner - assignment-notifications.ts (138 lines) — 2 notification procedures - assignment-redistribution.ts (1,162 lines) — 8 reassign/transfer procedures - index.ts (15 lines) — barrel export with router merge, zero frontend changes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -10,7 +10,7 @@ import { logAudit } from '@/server/utils/audit'
|
||||
import { createNotification } from '../services/in-app-notification'
|
||||
import { checkRequirementsAndTransition, triggerInProgressOnActivity, transitionProject, isTerminalState } from '../services/round-engine'
|
||||
import { EvaluationConfigSchema, MentoringConfigSchema } from '@/types/competition-configs'
|
||||
import type { Prisma, RoundType } from '@prisma/client'
|
||||
import type { PrismaClient, Prisma, RoundType } from '@prisma/client'
|
||||
|
||||
// All uploads use the single configured bucket (MINIO_BUCKET / mopc-files).
|
||||
// Files are organized by path prefix: {ProjectName}/{RoundName}/... for submissions,
|
||||
@@ -22,8 +22,7 @@ function generateInviteToken(): string {
|
||||
}
|
||||
|
||||
/** Check if a project has been rejected in any round (based on ProjectRoundState, not Project.status) */
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
async function isProjectRejected(prisma: any, projectId: string): Promise<boolean> {
|
||||
async function isProjectRejected(prisma: PrismaClient, projectId: string): Promise<boolean> {
|
||||
const rejected = await prisma.projectRoundState.findFirst({
|
||||
where: { projectId, state: 'REJECTED' },
|
||||
select: { id: true },
|
||||
|
||||
Reference in New Issue
Block a user