@studious-lms/server 1.2.45 → 1.2.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +45 -0
- package/.env.test.example +37 -0
- package/README.md +34 -7
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +12110 -0
- package/coverage/coverage-final.json +44 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +221 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/server/index.html +116 -0
- package/coverage/server/src/exportType.ts.html +109 -0
- package/coverage/server/src/index.html +161 -0
- package/coverage/server/src/index.ts.html +1702 -0
- package/coverage/server/src/instrument.ts.html +130 -0
- package/coverage/server/src/lib/config/env.ts.html +448 -0
- package/coverage/server/src/lib/config/index.html +116 -0
- package/coverage/server/src/lib/fileUpload.ts.html +1138 -0
- package/coverage/server/src/lib/googleCloudStorage.ts.html +334 -0
- package/coverage/server/src/lib/index.html +206 -0
- package/coverage/server/src/lib/jsonConversion.ts.html +2323 -0
- package/coverage/server/src/lib/jsonStyles.ts.html +193 -0
- package/coverage/server/src/lib/notificationHandler.ts.html +193 -0
- package/coverage/server/src/lib/pusher.ts.html +121 -0
- package/coverage/server/src/lib/thumbnailGenerator.ts.html +592 -0
- package/coverage/server/src/middleware/auth.ts.html +646 -0
- package/coverage/server/src/middleware/index.html +146 -0
- package/coverage/server/src/middleware/logging.ts.html +244 -0
- package/coverage/server/src/middleware/security.ts.html +271 -0
- package/coverage/server/src/routers/_app.ts.html +232 -0
- package/coverage/server/src/routers/agenda.ts.html +319 -0
- package/coverage/server/src/routers/announcement.ts.html +3481 -0
- package/coverage/server/src/routers/assignment.ts.html +7633 -0
- package/coverage/server/src/routers/attendance.ts.html +1030 -0
- package/coverage/server/src/routers/auth.ts.html +1081 -0
- package/coverage/server/src/routers/class.ts.html +3535 -0
- package/coverage/server/src/routers/comment.ts.html +991 -0
- package/coverage/server/src/routers/conversation.ts.html +982 -0
- package/coverage/server/src/routers/event.ts.html +1609 -0
- package/coverage/server/src/routers/file.ts.html +1144 -0
- package/coverage/server/src/routers/folder.ts.html +2797 -0
- package/coverage/server/src/routers/index.html +386 -0
- package/coverage/server/src/routers/labChat.ts.html +3073 -0
- package/coverage/server/src/routers/marketing.ts.html +340 -0
- package/coverage/server/src/routers/message.ts.html +1912 -0
- package/coverage/server/src/routers/notifications.ts.html +364 -0
- package/coverage/server/src/routers/section.ts.html +1120 -0
- package/coverage/server/src/routers/user.ts.html +862 -0
- package/coverage/server/src/routers/worksheet.ts.html +1729 -0
- package/coverage/server/src/trpc.ts.html +397 -0
- package/coverage/server/src/types/index.html +116 -0
- package/coverage/server/src/types/trpc.ts.html +127 -0
- package/coverage/server/src/utils/aiUser.ts.html +280 -0
- package/coverage/server/src/utils/email.ts.html +121 -0
- package/coverage/server/src/utils/generateInviteCode.ts.html +106 -0
- package/coverage/server/src/utils/index.html +206 -0
- package/coverage/server/src/utils/inference.ts.html +709 -0
- package/coverage/server/src/utils/logger.ts.html +664 -0
- package/coverage/server/src/utils/prismaErrorHandler.ts.html +907 -0
- package/coverage/server/src/utils/prismaWrapper.ts.html +355 -0
- package/coverage/server/vitest.config.ts.html +196 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +83 -52
- package/dist/index.js.map +1 -1
- package/dist/instrument.js +15 -8
- package/dist/instrument.js.map +1 -1
- package/dist/lib/config/env.d.ts +169 -0
- package/dist/lib/config/env.d.ts.map +1 -0
- package/dist/lib/config/env.js +115 -0
- package/dist/lib/config/env.js.map +1 -0
- package/dist/lib/fileUpload.d.ts.map +1 -1
- package/dist/lib/fileUpload.js +5 -4
- package/dist/lib/fileUpload.js.map +1 -1
- package/dist/lib/googleCloudStorage.d.ts.map +1 -1
- package/dist/lib/googleCloudStorage.js +7 -8
- package/dist/lib/googleCloudStorage.js.map +1 -1
- package/dist/lib/jsonConversion.d.ts.map +1 -1
- package/dist/lib/jsonConversion.js +14 -16
- package/dist/lib/jsonConversion.js.map +1 -1
- package/dist/lib/notificationHandler.d.ts +2 -2
- package/dist/lib/prisma.d.ts +2 -2
- package/dist/lib/prisma.d.ts.map +1 -1
- package/dist/lib/prisma.js +22 -3
- package/dist/lib/prisma.js.map +1 -1
- package/dist/lib/pusher.d.ts.map +1 -1
- package/dist/lib/pusher.js +8 -7
- package/dist/lib/pusher.js.map +1 -1
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +7 -5
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/security.d.ts +5 -0
- package/dist/middleware/security.d.ts.map +1 -0
- package/dist/middleware/security.js +77 -0
- package/dist/middleware/security.js.map +1 -0
- package/dist/routers/_app.d.ts +368 -108
- package/dist/routers/_app.d.ts.map +1 -1
- package/dist/routers/_app.js +4 -2
- package/dist/routers/_app.js.map +1 -1
- package/dist/routers/agenda.d.ts.map +1 -1
- package/dist/routers/agenda.js +12 -9
- package/dist/routers/agenda.js.map +1 -1
- package/dist/routers/announcement.d.ts +8 -0
- package/dist/routers/announcement.d.ts.map +1 -1
- package/dist/routers/announcement.js +6 -4
- package/dist/routers/announcement.js.map +1 -1
- package/dist/routers/assignment.d.ts +17 -4
- package/dist/routers/assignment.d.ts.map +1 -1
- package/dist/routers/assignment.js +51 -19
- package/dist/routers/assignment.js.map +1 -1
- package/dist/routers/attendance.d.ts +1 -0
- package/dist/routers/attendance.d.ts.map +1 -1
- package/dist/routers/attendance.js +4 -4
- package/dist/routers/attendance.js.map +1 -1
- package/dist/routers/auth.d.ts +20 -0
- package/dist/routers/auth.d.ts.map +1 -1
- package/dist/routers/auth.js +132 -15
- package/dist/routers/auth.js.map +1 -1
- package/dist/routers/class.d.ts +10 -0
- package/dist/routers/class.d.ts.map +1 -1
- package/dist/routers/class.js +49 -5
- package/dist/routers/class.js.map +1 -1
- package/dist/routers/comment.d.ts +2 -0
- package/dist/routers/comment.d.ts.map +1 -1
- package/dist/routers/conversation.d.ts +2 -0
- package/dist/routers/conversation.d.ts.map +1 -1
- package/dist/routers/conversation.js +46 -31
- package/dist/routers/conversation.js.map +1 -1
- package/dist/routers/file.d.ts.map +1 -1
- package/dist/routers/file.js +30 -7
- package/dist/routers/file.js.map +1 -1
- package/dist/routers/labChat.d.ts +2 -0
- package/dist/routers/labChat.d.ts.map +1 -1
- package/dist/routers/labChat.js +5 -322
- package/dist/routers/labChat.js.map +1 -1
- package/dist/routers/marketing.d.ts +1 -1
- package/dist/routers/message.d.ts +1 -0
- package/dist/routers/message.d.ts.map +1 -1
- package/dist/routers/message.js +3 -2
- package/dist/routers/message.js.map +1 -1
- package/dist/routers/newtonChat.d.ts +55 -0
- package/dist/routers/newtonChat.d.ts.map +1 -0
- package/dist/routers/newtonChat.js +262 -0
- package/dist/routers/newtonChat.js.map +1 -0
- package/dist/routers/notifications.d.ts +4 -4
- package/dist/routers/section.d.ts +19 -4
- package/dist/routers/section.d.ts.map +1 -1
- package/dist/routers/section.js +26 -8
- package/dist/routers/section.js.map +1 -1
- package/dist/routers/user.d.ts.map +1 -1
- package/dist/routers/user.js +5 -4
- package/dist/routers/user.js.map +1 -1
- package/dist/routers/worksheet.d.ts +44 -41
- package/dist/routers/worksheet.d.ts.map +1 -1
- package/dist/routers/worksheet.js +25 -34
- package/dist/routers/worksheet.js.map +1 -1
- package/dist/seedDatabase.d.ts +1 -1
- package/dist/seedDatabase.js +275 -284
- package/dist/seedDatabase.js.map +1 -1
- package/dist/server/pipelines/aiLabChat.d.ts +21 -0
- package/dist/server/pipelines/aiLabChat.d.ts.map +1 -0
- package/dist/server/pipelines/aiLabChat.js +456 -0
- package/dist/server/pipelines/aiLabChat.js.map +1 -0
- package/dist/server/pipelines/aiNewtonChat.d.ts +30 -0
- package/dist/server/pipelines/aiNewtonChat.d.ts.map +1 -0
- package/dist/server/pipelines/aiNewtonChat.js +280 -0
- package/dist/server/pipelines/aiNewtonChat.js.map +1 -0
- package/dist/server/pipelines/gradeWorksheet.d.ts +15 -0
- package/dist/server/pipelines/gradeWorksheet.d.ts.map +1 -0
- package/dist/server/pipelines/gradeWorksheet.js +139 -0
- package/dist/server/pipelines/gradeWorksheet.js.map +1 -0
- package/dist/trpc.d.ts.map +1 -1
- package/dist/trpc.js +2 -2
- package/dist/trpc.js.map +1 -1
- package/dist/utils/email.d.ts +9 -1
- package/dist/utils/email.d.ts.map +1 -1
- package/dist/utils/email.js +20 -5
- package/dist/utils/email.js.map +1 -1
- package/dist/utils/inference.d.ts +5 -0
- package/dist/utils/inference.d.ts.map +1 -1
- package/dist/utils/inference.js +71 -7
- package/dist/utils/inference.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +3 -3
- package/dist/utils/logger.js.map +1 -1
- package/docker-compose.yml +14 -0
- package/package.json +13 -4
- package/prisma/schema.prisma +34 -5
- package/scripts/test-pre-push.ts +14 -0
- package/src/index.ts +98 -54
- package/src/instrument.ts +13 -6
- package/src/lib/config/env.ts +126 -0
- package/src/lib/fileUpload.ts +3 -2
- package/src/lib/googleCloudStorage.ts +6 -6
- package/src/lib/jsonConversion.ts +12 -14
- package/src/lib/prisma.ts +23 -2
- package/src/lib/pusher.ts +6 -5
- package/src/middleware/auth.ts +5 -3
- package/src/middleware/security.ts +80 -0
- package/src/routers/_app.ts +2 -0
- package/src/routers/agenda.ts +10 -7
- package/src/routers/announcement.ts +4 -2
- package/src/routers/assignment.ts +74 -41
- package/src/routers/attendance.ts +2 -2
- package/src/routers/auth.ts +143 -14
- package/src/routers/class.ts +52 -3
- package/src/routers/conversation.ts +49 -29
- package/src/routers/file.ts +29 -5
- package/src/routers/labChat.ts +3 -367
- package/src/routers/message.ts +1 -1
- package/src/routers/newtonChat.ts +299 -0
- package/src/routers/section.ts +26 -6
- package/src/routers/user.ts +3 -2
- package/src/routers/worksheet.ts +26 -38
- package/src/seedDatabase.ts +290 -283
- package/src/server/pipelines/aiLabChat.ts +507 -0
- package/src/server/pipelines/aiNewtonChat.ts +338 -0
- package/src/server/pipelines/gradeWorksheet.ts +151 -0
- package/src/trpc.ts +2 -0
- package/src/utils/email.ts +30 -3
- package/src/utils/inference.ts +85 -5
- package/src/utils/logger.ts +2 -1
- package/tests/announcement.test.ts +164 -0
- package/tests/assignment.test.ts +296 -0
- package/tests/attendance.test.ts +168 -0
- package/tests/auth.test.ts +33 -10
- package/tests/class.test.ts +34 -9
- package/tests/event.test.ts +228 -0
- package/tests/section.test.ts +216 -0
- package/tests/setup.ts +70 -16
- package/tests/user.test.ts +158 -0
- package/vitest.config.ts +26 -0
- package/API_SPECIFICATION.md +0 -1597
- package/BASE64_REMOVAL_SUMMARY.md +0 -164
- package/CHAT_API_SPEC.md +0 -579
- package/LAB_CHAT_API_SPEC.md +0 -518
- package/dist/routers/school.d.ts +0 -208
- package/dist/routers/school.d.ts.map +0 -1
- package/dist/routers/school.js +0 -483
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assignment.js","sources":["routers/assignment.ts"],"sourceRoot":"/","sourcesContent":["import { z } from \"zod\";\nimport { createTRPCRouter, protectedProcedure, protectedClassMemberProcedure, protectedTeacherProcedure } from \"../trpc.js\";\nimport { TRPCError } from \"@trpc/server\";\nimport { prisma } from \"../lib/prisma.js\";\nimport { createDirectUploadFiles, type DirectUploadFile, confirmDirectUpload, updateUploadProgress, type UploadedFile } from \"../lib/fileUpload.js\";\nimport { deleteFile } from \"../lib/googleCloudStorage.js\";\nimport { sendNotifications } from \"../lib/notificationHandler.js\";\nimport { logger } from \"../utils/logger.js\";\n\n// DEPRECATED: This schema is no longer used - files are uploaded directly to GCS\n// Use directFileSchema instead\n\n// New schema for direct file uploads (no base64 data)\nconst directFileSchema = z.object({\n name: z.string(),\n type: z.string(),\n size: z.number(),\n // No data field - for direct file uploads\n});\n\nconst createAssignmentSchema = z.object({\n classId: z.string(),\n title: z.string(),\n instructions: z.string(),\n dueDate: z.string(),\n files: z.array(directFileSchema).optional(), // Use direct file schema\n existingFileIds: z.array(z.string()).optional(),\n aiPolicyLevel: z.number().default(0),\n acceptFiles: z.boolean().optional(),\n acceptExtendedResponse: z.boolean().optional(),\n acceptWorksheet: z.boolean().optional(),\n worksheetIds: z.array(z.string()).optional(),\n gradeWithAI: z.boolean().optional(),\n studentIds: z.array(z.string()).optional(),\n maxGrade: z.number().optional(),\n graded: z.boolean().optional(),\n weight: z.number().optional(),\n sectionId: z.string().optional(),\n type: z.enum(['HOMEWORK', 'QUIZ', 'TEST', 'PROJECT', 'ESSAY', 'DISCUSSION', 'PRESENTATION', 'LAB', 'OTHER']).optional(),\n markSchemeId: z.string().optional(),\n gradingBoundaryId: z.string().optional(),\n inProgress: z.boolean().optional(),\n});\n\nconst updateAssignmentSchema = z.object({\n classId: z.string(),\n id: z.string(),\n title: z.string().optional(),\n instructions: z.string().optional(),\n dueDate: z.string().optional(),\n files: z.array(directFileSchema).optional(), // Use direct file schema\n aiPolicyLevel: z.number().default(0),\n acceptFiles: z.boolean().optional(),\n acceptExtendedResponse: z.boolean().optional(),\n acceptWorksheet: z.boolean().optional(),\n worksheetIds: z.array(z.string()).optional(),\n gradeWithAI: z.boolean().optional(),\n studentIds: z.array(z.string()).optional(),\n existingFileIds: z.array(z.string()).optional(),\n removedAttachments: z.array(z.string()).optional(),\n maxGrade: z.number().optional(),\n graded: z.boolean().optional(),\n weight: z.number().optional(),\n sectionId: z.string().nullable().optional(),\n type: z.enum(['HOMEWORK', 'QUIZ', 'TEST', 'PROJECT', 'ESSAY', 'DISCUSSION', 'PRESENTATION', 'LAB', 'OTHER']).optional(),\n inProgress: z.boolean().optional(),\n});\n\nconst deleteAssignmentSchema = z.object({\n id: z.string(),\n classId: z.string(),\n});\n\nconst getAssignmentSchema = z.object({\n id: z.string(),\n classId: z.string(),\n});\n\nconst submissionSchema = z.object({\n assignmentId: z.string(),\n classId: z.string(),\n submissionId: z.string(),\n submit: z.boolean().optional(),\n newAttachments: z.array(directFileSchema).optional(), // Use direct file schema\n extendedResponse: z.string().optional(),\n existingFileIds: z.array(z.string()).optional(),\n removedAttachments: z.array(z.string()).optional(),\n});\n\nconst updateSubmissionSchema = z.object({\n assignmentId: z.string(),\n classId: z.string(),\n submissionId: z.string(),\n return: z.boolean().optional(),\n gradeReceived: z.number().nullable().optional(),\n newAttachments: z.array(directFileSchema).optional(), // Use direct file schema\n existingFileIds: z.array(z.string()).optional(),\n removedAttachments: z.array(z.string()).optional(),\n feedback: z.string().optional(),\n rubricGrades: z.array(z.object({\n criteriaId: z.string(),\n selectedLevelId: z.string(),\n points: z.number(),\n comments: z.string(),\n })).optional(),\n});\n\n// New schemas for direct upload functionality\nconst getAssignmentUploadUrlsSchema = z.object({\n assignmentId: z.string(),\n classId: z.string(),\n files: z.array(directFileSchema),\n});\n\nconst getSubmissionUploadUrlsSchema = z.object({\n submissionId: z.string(),\n classId: z.string(),\n files: z.array(directFileSchema),\n});\n\nconst confirmAssignmentUploadSchema = z.object({\n fileId: z.string(),\n uploadSuccess: z.boolean(),\n errorMessage: z.string().optional(),\n});\n\nconst confirmSubmissionUploadSchema = z.object({\n fileId: z.string(),\n uploadSuccess: z.boolean(),\n errorMessage: z.string().optional(),\n});\n\nconst getAnnotationUploadUrlsSchema = z.object({\n submissionId: z.string(),\n classId: z.string(),\n files: z.array(directFileSchema),\n});\n\nconst confirmAnnotationUploadSchema = z.object({\n fileId: z.string(),\n uploadSuccess: z.boolean(),\n errorMessage: z.string().optional(),\n});\n\nconst updateUploadProgressSchema = z.object({\n fileId: z.string(),\n progress: z.number().min(0).max(100),\n});\n\n// Helper function to get unified list of sections and assignments for a class\nasync function getUnifiedList(tx: any, classId: string) {\n const [sections, assignments] = await Promise.all([\n tx.section.findMany({\n where: { classId },\n select: { id: true, order: true },\n }),\n tx.assignment.findMany({\n where: { classId },\n select: { id: true, order: true },\n }),\n ]);\n\n // Combine and sort by order\n const unified = [\n ...sections.map((s: any) => ({ id: s.id, order: s.order, type: 'section' as const })),\n ...assignments.map((a: any) => ({ id: a.id, order: a.order, type: 'assignment' as const })),\n ].sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER));\n\n return unified;\n}\n\n// Helper function to normalize unified list to 1..n\n// Updated to batch updates to prevent timeouts with large lists\nasync function normalizeUnifiedList(tx: any, classId: string, orderedItems: Array<{ id: string; type: 'section' | 'assignment' }>) {\n const BATCH_SIZE = 10; // Process 10 items at a time to avoid overwhelming the transaction\n \n // Group items by type for more efficient updates\n const sections: Array<{ id: string; order: number }> = [];\n const assignments: Array<{ id: string; order: number }> = [];\n \n orderedItems.forEach((item, index) => {\n const orderData = { id: item.id, order: index + 1 };\n if (item.type === 'section') {\n sections.push(orderData);\n } else {\n assignments.push(orderData);\n }\n });\n \n // Process updates in batches\n const processBatch = async (items: Array<{ id: string; order: number }>, type: 'section' | 'assignment') => {\n for (let i = 0; i < items.length; i += BATCH_SIZE) {\n const batch = items.slice(i, i + BATCH_SIZE);\n await Promise.all(\n batch.map(item => {\n if (type === 'section') {\n return tx.section.update({ where: { id: item.id }, data: { order: item.order } });\n } else {\n return tx.assignment.update({ where: { id: item.id }, data: { order: item.order } });\n }\n })\n );\n }\n };\n \n // Process sections and assignments sequentially to avoid transaction overload\n await processBatch(sections, 'section');\n await processBatch(assignments, 'assignment');\n}\n\nexport const assignmentRouter = createTRPCRouter({\n // Reorder an assignment within the unified list (sections + assignments)\n reorder: protectedTeacherProcedure\n .input(z.object({\n classId: z.string(),\n movedId: z.string(),\n // One of: place at start/end of unified list, or relative to targetId (can be section or assignment)\n position: z.enum(['start', 'end', 'before', 'after']),\n targetId: z.string().optional(), // Can be a section ID or assignment ID\n }))\n .mutation(async ({ ctx, input }) => {\n const { classId, movedId, position, targetId } = input;\n\n const moved = await prisma.assignment.findFirst({\n where: { id: movedId, classId },\n select: { id: true, classId: true },\n });\n\n if (!moved) {\n throw new TRPCError({ code: 'NOT_FOUND', message: 'Assignment not found' });\n }\n\n if ((position === 'before' || position === 'after') && !targetId) {\n throw new TRPCError({ code: 'BAD_REQUEST', message: 'targetId required for before/after' });\n }\n\n const result = await prisma.$transaction(async (tx) => {\n const unified = await getUnifiedList(tx, classId);\n\n // Find moved item and target in unified list\n const movedIdx = unified.findIndex(item => item.id === movedId && item.type === 'assignment');\n if (movedIdx === -1) {\n throw new TRPCError({ code: 'NOT_FOUND', message: 'Assignment not found in unified list' });\n }\n\n // Build list without moved item\n const withoutMoved = unified.filter(item => !(item.id === movedId && item.type === 'assignment'));\n\n let next: Array<{ id: string; type: 'section' | 'assignment' }> = [];\n\n if (position === 'start') {\n next = [{ id: movedId, type: 'assignment' }, ...withoutMoved.map(item => ({ id: item.id, type: item.type }))];\n } else if (position === 'end') {\n next = [...withoutMoved.map(item => ({ id: item.id, type: item.type })), { id: movedId, type: 'assignment' }];\n } else {\n const targetIdx = withoutMoved.findIndex(item => item.id === targetId);\n if (targetIdx === -1) {\n throw new TRPCError({ code: 'BAD_REQUEST', message: 'targetId not found in unified list' });\n }\n if (position === 'before') {\n next = [\n ...withoutMoved.slice(0, targetIdx).map(item => ({ id: item.id, type: item.type })),\n { id: movedId, type: 'assignment' },\n ...withoutMoved.slice(targetIdx).map(item => ({ id: item.id, type: item.type })),\n ];\n } else {\n next = [\n ...withoutMoved.slice(0, targetIdx + 1).map(item => ({ id: item.id, type: item.type })),\n { id: movedId, type: 'assignment' },\n ...withoutMoved.slice(targetIdx + 1).map(item => ({ id: item.id, type: item.type })),\n ];\n }\n }\n\n // Normalize to 1..n\n await normalizeUnifiedList(tx, classId, next);\n\n return tx.assignment.findUnique({ where: { id: movedId } });\n }, {\n maxWait: 10000, // 10 seconds max wait time\n timeout: 30000, // 30 seconds timeout for reordering operations\n });\n\n return result;\n }),\n order: protectedTeacherProcedure\n .input(z.object({\n id: z.string(),\n classId: z.string(),\n order: z.number(),\n }))\n .mutation(async ({ ctx, input }) => {\n // Deprecated: prefer `reorder`. For backward-compatibility, set the order then normalize unified list.\n const { id, order } = input;\n\n const current = await prisma.assignment.findUnique({\n where: { id },\n select: { id: true, classId: true },\n });\n\n if (!current) {\n throw new TRPCError({ code: 'NOT_FOUND', message: 'Assignment not found' });\n }\n\n const updated = await prisma.$transaction(async (tx) => {\n await tx.assignment.update({ where: { id }, data: { order } });\n\n // Normalize entire unified list\n const unified = await getUnifiedList(tx, current.classId);\n await normalizeUnifiedList(tx, current.classId, unified.map(item => ({ id: item.id, type: item.type })));\n\n return tx.assignment.findUnique({ where: { id } });\n }, {\n maxWait: 10000, // 10 seconds max wait time\n timeout: 30000, // 30 seconds timeout for reordering operations\n });\n\n return updated;\n }),\n\n move: protectedTeacherProcedure\n .input(z.object({\n id: z.string(),\n classId: z.string(),\n targetSectionId: z.string().nullable().optional(),\n }))\n .mutation(async ({ ctx, input }) => {\n const { id } = input;\n const targetSectionId = (input.targetSectionId ?? null) || null; // normalize empty string to null\n\n const moved = await prisma.assignment.findUnique({\n where: { id },\n select: { id: true, classId: true, sectionId: true },\n });\n\n if (!moved) {\n throw new TRPCError({ code: 'NOT_FOUND', message: 'Assignment not found' });\n }\n\n const updated = await prisma.$transaction(async (tx) => {\n // Update sectionId first\n await tx.assignment.update({ where: { id }, data: { sectionId: targetSectionId } });\n\n // The unified list ordering remains the same, just the assignment's sectionId changed\n // No need to reorder since we're keeping the same position in the unified list\n // If frontend wants to change position, they should call reorder after move\n\n return tx.assignment.findUnique({ where: { id } });\n }, {\n maxWait: 5000, // 5 seconds max wait time\n timeout: 10000, // 10 seconds timeout\n });\n\n return updated;\n }),\n\n create: protectedProcedure\n .input(createAssignmentSchema)\n .mutation(async ({ ctx, input }) => {\n const { classId, title, instructions, dueDate, files, existingFileIds, aiPolicyLevel, acceptFiles, acceptExtendedResponse, acceptWorksheet, worksheetIds, gradeWithAI, studentIds, maxGrade, graded, weight, sectionId, type, markSchemeId, gradingBoundaryId, inProgress } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n // Pre-fetch data needed for the transaction (outside transaction scope)\n const [classData, rubricData] = await Promise.all([\n prisma.class.findUnique({\n where: { id: classId },\n include: {\n students: {\n select: { id: true }\n }\n }\n }),\n markSchemeId ? prisma.markScheme.findUnique({\n where: { id: markSchemeId },\n select: {\n structured: true,\n }\n }) : null\n ]);\n\n if (!classData) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Class not found\",\n });\n }\n\n // Calculate max grade outside transaction\n let computedMaxGrade = maxGrade;\n if (markSchemeId && rubricData) {\n const parsedRubric = JSON.parse(rubricData.structured || \"{}\");\n computedMaxGrade = parsedRubric.criteria.reduce((acc: number, criterion: any) => {\n const maxPoints = Math.max(...criterion.levels.map((level: any) => level.points));\n return acc + maxPoints;\n }, 0);\n }\n\n console.log(studentIds);\n\n // Prepare submission data outside transaction\n const submissionData = studentIds && studentIds.length > 0 \n ? studentIds.map((studentId) => ({\n student: { connect: { id: studentId } }\n }))\n : classData.students.map((student) => ({\n student: { connect: { id: student.id } }\n }));\n\n const teacherId = ctx.user.id;\n\n // Minimal transaction - only for critical operations\n const assignment = await prisma.$transaction(async (tx) => {\n // Create assignment with order 0 (will be at top)\n const created = await tx.assignment.create({\n data: {\n title,\n instructions,\n dueDate: new Date(dueDate),\n maxGrade: markSchemeId ? computedMaxGrade : maxGrade,\n graded,\n weight,\n type,\n ...(aiPolicyLevel && { aiPolicyLevel }),\n acceptFiles,\n acceptExtendedResponse,\n acceptWorksheet,\n ...(worksheetIds && {\n worksheets: {\n connect: worksheetIds.map(id => ({ id }))\n }\n }),\n gradeWithAI,\n ...(studentIds && {\n assignedTo: {\n connect: studentIds.map(id => ({ id }))\n }\n }),\n order: 0, // Set to 0 to place at top\n inProgress: inProgress || false,\n class: {\n connect: { id: classId }\n },\n ...(sectionId && {\n section: {\n connect: { id: sectionId }\n }\n }),\n ...(markSchemeId && {\n markScheme: {\n connect: { id: markSchemeId }\n }\n }),\n ...(gradingBoundaryId && {\n gradingBoundary: {\n connect: { id: gradingBoundaryId }\n }\n }),\n submissions: {\n create: submissionData\n },\n teacher: {\n connect: { id: teacherId }\n }\n },\n select: {\n id: true,\n title: true,\n instructions: true,\n dueDate: true,\n maxGrade: true,\n graded: true,\n weight: true,\n type: true,\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n }\n },\n section: {\n select: {\n id: true,\n name: true\n }\n },\n teacher: {\n select: {\n id: true,\n username: true\n }\n },\n class: {\n select: {\n id: true,\n name: true\n }\n }\n }\n });\n\n // Optimized reordering - only increment existing items by 1\n // This is much faster than reordering everything\n await tx.assignment.updateMany({\n where: {\n classId: classId,\n id: { not: created.id },\n },\n data: {\n order: { increment: 1 }\n }\n });\n \n await tx.section.updateMany({\n where: {\n classId: classId,\n },\n data: {\n order: { increment: 1 }\n }\n });\n\n // Update the created assignment to have order 1\n await tx.assignment.update({\n where: { id: created.id },\n data: { order: 1 }\n });\n\n return created;\n }, {\n maxWait: 10000, // Increased to 10 seconds max wait time\n timeout: 20000, // Increased to 20 seconds timeout for safety\n });\n\n // Handle file operations outside transaction\n const fileOperations: Promise<any>[] = [];\n\n // Process direct upload files\n if (files && files.length > 0) {\n fileOperations.push(\n createDirectUploadFiles(files, ctx.user.id, undefined, assignment.id)\n .then(uploadedFiles => {\n if (uploadedFiles.length > 0) {\n return prisma.assignment.update({\n where: { id: assignment.id },\n data: {\n attachments: {\n create: uploadedFiles.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n path: file.path,\n }))\n }\n }\n });\n }\n })\n );\n }\n\n // Connect existing files\n if (existingFileIds && existingFileIds.length > 0) {\n fileOperations.push(\n prisma.assignment.update({\n where: { id: assignment.id },\n data: {\n attachments: {\n connect: existingFileIds.map(fileId => ({ id: fileId }))\n }\n }\n })\n );\n }\n\n // Execute file operations in parallel\n await Promise.all(fileOperations);\n \n // Send notifications asynchronously (non-blocking)\n sendNotifications(classData.students.map(student => student.id), {\n title: `🔔 New assignment for ${classData.name}`,\n content:\n `The assignment \"${title}\" has been created in ${classData.name}.\\n\n Due date: ${new Date(dueDate).toLocaleDateString()}.\n [Link to assignment](/class/${classId}/assignments/${assignment.id})`\n }).catch(error => {\n logger.error('Failed to send assignment notifications:', error);\n });\n\n return assignment;\n }),\n update: protectedProcedure\n .input(updateAssignmentSchema)\n .mutation(async ({ ctx, input }) => {\n const { id, title, instructions, dueDate, files, existingFileIds, worksheetIds, aiPolicyLevel, maxGrade, graded, weight, sectionId, type, inProgress, acceptFiles, acceptExtendedResponse, acceptWorksheet, gradeWithAI, studentIds } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n // Pre-fetch all necessary data outside transaction\n const [assignment, classData] = await Promise.all([\n prisma.assignment.findFirst({\n where: {\n id,\n teacherId: ctx.user.id,\n },\n include: {\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n path: true,\n size: true,\n uploadStatus: true,\n thumbnail: {\n select: {\n path: true\n }\n }\n },\n },\n class: {\n select: {\n id: true,\n name: true\n }\n },\n markScheme: true,\n },\n }),\n prisma.class.findFirst({\n where: { \n assignments: { \n some: { id } \n } \n },\n include: {\n students: {\n select: { id: true }\n }\n }\n })\n ]);\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n // Prepare submission data outside transaction if needed\n const submissionData = studentIds && studentIds.length > 0 \n ? studentIds.map((studentId) => ({\n student: { connect: { id: studentId } }\n }))\n : classData?.students.map((student) => ({\n student: { connect: { id: student.id } }\n }));\n\n // Handle file deletion operations outside transaction\n const fileDeletionPromises: Promise<void>[] = [];\n if (input.removedAttachments && input.removedAttachments.length > 0) {\n const filesToDelete = assignment.attachments.filter((file) =>\n input.removedAttachments!.includes(file.id)\n );\n\n filesToDelete.forEach((file) => {\n if (file.uploadStatus === 'COMPLETED') {\n fileDeletionPromises.push(\n deleteFile(file.path).catch(error => {\n console.warn(`Failed to delete file ${file.path}:`, error);\n })\n );\n if (file.thumbnail?.path) {\n fileDeletionPromises.push(\n deleteFile(file.thumbnail.path).catch(error => {\n console.warn(`Failed to delete thumbnail ${file.thumbnail!.path}:`, error);\n })\n );\n }\n }\n });\n }\n\n // Execute file deletions in parallel\n await Promise.all(fileDeletionPromises);\n\n // Prepare file upload operations\n let uploadedFiles: UploadedFile[] = [];\n if (files && files.length > 0) {\n uploadedFiles = await createDirectUploadFiles(files, ctx.user.id, undefined, input.id);\n }\n\n // Minimal transaction for database update\n const updatedAssignment = await prisma.$transaction(async (tx) => {\n return tx.assignment.update({\n where: { id },\n data: {\n ...(title && { title }),\n ...(instructions && { instructions }),\n ...(dueDate && { dueDate: new Date(dueDate) }),\n ...(maxGrade && { maxGrade }),\n ...(graded !== undefined && { graded }),\n ...(weight && { weight }),\n ...(type && { type }),\n ...(inProgress !== undefined && { inProgress }),\n ...(acceptFiles !== undefined && { acceptFiles }),\n ...(acceptExtendedResponse !== undefined && { acceptExtendedResponse }),\n ...(acceptWorksheet !== undefined && { acceptWorksheet }),\n ...(gradeWithAI !== undefined && { gradeWithAI }),\n ...(studentIds && {\n assignedTo: {\n set: [], // Clear existing\n connect: studentIds.map(id => ({ id }))\n }\n }),\n ...(submissionData && {\n submissions: {\n deleteMany: {}, // Clear existing submissions\n create: submissionData\n }\n }),\n ...(aiPolicyLevel !== undefined && { aiPolicyLevel }),\n ...(sectionId !== undefined && {\n section: sectionId ? {\n connect: { id: sectionId }\n } : {\n disconnect: true\n }\n }),\n ...(worksheetIds && {\n worksheets: {\n set: [], // Clear existing\n connect: worksheetIds.map(id => ({ id }))\n }\n }),\n ...(uploadedFiles.length > 0 && {\n attachments: {\n create: uploadedFiles.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n path: file.path,\n ...(file.thumbnailId && {\n thumbnail: {\n connect: { id: file.thumbnailId }\n }\n })\n }))\n }\n }),\n ...(existingFileIds && existingFileIds.length > 0 && {\n attachments: {\n connect: existingFileIds.map(fileId => ({ id: fileId }))\n }\n }),\n ...(input.removedAttachments && input.removedAttachments.length > 0 && {\n attachments: {\n deleteMany: {\n id: { in: input.removedAttachments }\n }\n }\n }),\n },\n select: {\n id: true,\n title: true,\n instructions: true,\n dueDate: true,\n maxGrade: true,\n graded: true,\n weight: true,\n type: true,\n createdAt: true,\n markSchemeId: true,\n submissions: {\n select: {\n student: {\n select: {\n id: true,\n username: true\n }\n }\n }\n },\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n thumbnail: true,\n size: true,\n path: true,\n uploadedAt: true,\n thumbnailId: true,\n }\n },\n section: true,\n teacher: true,\n class: true\n }\n });\n }, {\n maxWait: 5000, // 5 seconds max wait time\n timeout: 10000, // 10 seconds timeout\n });\n\n // Handle rubric max grade calculation outside transaction\n if (updatedAssignment.markSchemeId) {\n prisma.markScheme.findUnique({\n where: { id: updatedAssignment.markSchemeId },\n select: {\n structured: true,\n }\n }).then(rubric => {\n if (rubric) {\n const parsedRubric = JSON.parse(rubric.structured || \"{}\");\n const computedMaxGrade = parsedRubric.criteria?.reduce((acc: number, criterion: any) => {\n const maxPoints = Math.max(...criterion.levels.map((level: any) => level.points));\n return acc + maxPoints;\n }, 0) || 0;\n\n return prisma.assignment.update({\n where: { id },\n data: {\n maxGrade: computedMaxGrade,\n }\n });\n }\n }).catch(error => {\n logger.error('Failed to update max grade from rubric:', error);\n });\n }\n\n return updatedAssignment;\n }),\n\n delete: protectedProcedure\n .input(deleteAssignmentSchema)\n .mutation(async ({ ctx, input }) => {\n const { id, classId } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n // Get the assignment with all related files\n const assignment = await prisma.assignment.findFirst({\n where: {\n id,\n teacherId: ctx.user.id,\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n submissions: {\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n annotations: {\n include: {\n thumbnail: true\n }\n }\n }\n }\n }\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n // Delete all files from storage\n const filesToDelete = [\n ...assignment.attachments,\n ...assignment.submissions.flatMap(sub => [...sub.attachments, ...sub.annotations])\n ];\n\n // Delete files from storage (only if they were actually uploaded)\n await Promise.all(filesToDelete.map(async (file) => {\n try {\n // Only delete from GCS if the file was successfully uploaded\n if (file.uploadStatus === 'COMPLETED') {\n // Delete the main file\n await deleteFile(file.path);\n\n // Delete thumbnail if it exists\n if (file.thumbnail) {\n await deleteFile(file.thumbnail.path);\n }\n }\n } catch (error) {\n console.warn(`Failed to delete file ${file.path}:`, error);\n }\n }));\n\n // Delete the assignment (this will cascade delete all related records)\n await prisma.assignment.delete({\n where: { id },\n });\n\n return {\n id,\n };\n }),\n\n get: protectedProcedure\n .input(getAssignmentSchema)\n .query(async ({ ctx, input }) => {\n const { id, classId } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const assignment = await prisma.assignment.findUnique({\n where: {\n id,\n // classId,\n },\n include: {\n submissions: {\n select: {\n student: {\n select: {\n id: true,\n username: true\n }\n }\n }\n },\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n size: true,\n path: true,\n uploadedAt: true,\n thumbnailId: true,\n }\n },\n section: {\n select: {\n id: true,\n name: true,\n }\n },\n teacher: {\n select: {\n id: true,\n username: true\n }\n },\n worksheets: {\n select: {\n id: true,\n name: true,\n }\n },\n class: {\n select: {\n id: true,\n name: true\n }\n },\n eventAttached: {\n select: {\n id: true,\n name: true,\n startTime: true,\n endTime: true,\n location: true,\n remarks: true,\n }\n },\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n }\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n const sections = await prisma.section.findMany({\n where: {\n classId: assignment.classId,\n },\n select: {\n id: true,\n name: true,\n },\n });\n\n return { ...assignment, sections };\n }),\n\n getSubmission: protectedClassMemberProcedure\n .input(z.object({\n assignmentId: z.string(),\n classId: z.string(),\n }))\n .query(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { assignmentId } = input;\n\n const submission = await prisma.submission.findFirst({\n where: {\n assignmentId,\n studentId: ctx.user.id,\n },\n include: {\n attachments: true,\n student: {\n select: {\n id: true,\n username: true,\n profile: true,\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n worksheets: {\n select: {\n id: true,\n name: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n annotations: true,\n },\n });\n\n if (!submission) {\n // Create a new submission if it doesn't exist\n return await prisma.submission.create({\n data: {\n assignment: {\n connect: { id: assignmentId },\n },\n student: {\n connect: { id: ctx.user.id },\n },\n },\n include: {\n attachments: true,\n annotations: true,\n student: {\n select: {\n id: true,\n username: true,\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n }\n\n return {\n ...submission,\n late: submission.assignment.dueDate < new Date(),\n };\n }),\n\n getSubmissionById: protectedTeacherProcedure\n .input(z.object({\n submissionId: z.string(),\n classId: z.string(),\n }))\n .query(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { submissionId, classId } = input;\n\n const submission = await prisma.submission.findFirst({\n where: {\n id: submissionId,\n assignment: {\n classId,\n class: {\n teachers: {\n some: {\n id: ctx.user.id\n }\n }\n }\n },\n },\n include: {\n attachments: true,\n annotations: true,\n student: {\n select: {\n id: true,\n username: true,\n profile: true,\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n },\n worksheets: {\n select: {\n id: true,\n name: true,\n }\n }\n },\n },\n },\n });\n\n if (!submission) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Submission not found\",\n });\n }\n\n return {\n ...submission,\n late: submission.assignment.dueDate < new Date(),\n };\n }),\n\n updateSubmission: protectedClassMemberProcedure\n .input(submissionSchema)\n .mutation(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { submissionId, submit, newAttachments, existingFileIds, removedAttachments, extendedResponse } = input;\n\n const submission = await prisma.submission.findFirst({\n where: {\n id: submissionId,\n OR: [\n {\n student: {\n id: ctx.user.id,\n },\n },\n {\n assignment: {\n class: {\n teachers: {\n some: {\n id: ctx.user.id,\n },\n },\n },\n },\n },\n ],\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n\n if (!submission) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Submission not found\",\n });\n }\n\n if (submit !== undefined) {\n // Toggle submission status\n return await prisma.submission.update({\n where: { id: submission.id },\n data: {\n submitted: !submission.submitted,\n submittedAt: new Date(),\n },\n include: {\n attachments: true,\n student: {\n select: {\n id: true,\n username: true,\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n }\n\n let uploadedFiles: UploadedFile[] = [];\n if (newAttachments && newAttachments.length > 0) {\n // Store files in a class and assignment specific directory\n uploadedFiles = await createDirectUploadFiles(newAttachments, ctx.user.id, undefined, undefined, submission.id);\n }\n\n // Update submission with new file attachments\n if (uploadedFiles.length > 0) {\n await prisma.submission.update({\n where: { id: submission.id },\n data: {\n attachments: {\n create: uploadedFiles.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n path: file.path,\n ...(file.thumbnailId && {\n thumbnail: {\n connect: { id: file.thumbnailId }\n }\n })\n }))\n }\n }\n });\n }\n\n // Connect existing files if provided\n if (existingFileIds && existingFileIds.length > 0) {\n await prisma.submission.update({\n where: { id: submission.id },\n data: {\n attachments: {\n connect: existingFileIds.map(fileId => ({ id: fileId }))\n }\n }\n });\n }\n\n // Delete removed attachments if any\n if (removedAttachments && removedAttachments.length > 0) {\n const filesToDelete = submission.attachments.filter((file) =>\n removedAttachments.includes(file.id)\n );\n\n // Delete files from storage (only if they were actually uploaded)\n await Promise.all(filesToDelete.map(async (file) => {\n try {\n // Only delete from GCS if the file was successfully uploaded\n if (file.uploadStatus === 'COMPLETED') {\n // Delete the main file\n await deleteFile(file.path);\n\n // Delete thumbnail if it exists\n if (file.thumbnail?.path) {\n await deleteFile(file.thumbnail.path);\n }\n }\n } catch (error) {\n console.warn(`Failed to delete file ${file.path}:`, error);\n }\n }));\n }\n\n // Update submission with attachments\n return await prisma.submission.update({\n where: { id: submission.id },\n data: {\n ...(removedAttachments && removedAttachments.length > 0 && {\n attachments: {\n deleteMany: {\n id: { in: removedAttachments },\n },\n },\n }),\n ...(extendedResponse !== undefined && { extendedResponse }),\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n student: {\n select: {\n id: true,\n username: true,\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n }),\n\n getSubmissions: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n classId: z.string(),\n }))\n .query(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { assignmentId } = input;\n\n const submissions = await prisma.submission.findMany({\n where: {\n assignment: {\n id: assignmentId,\n class: {\n teachers: {\n some: { id: ctx.user.id },\n },\n },\n },\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n student: {\n select: {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n profilePicture: true,\n profilePictureThumbnail: true,\n },\n },\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n\n return submissions.map(submission => ({\n ...submission,\n late: submission.assignment.dueDate < new Date(),\n }));\n }),\n\n updateSubmissionAsTeacher: protectedTeacherProcedure\n .input(updateSubmissionSchema)\n .mutation(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { submissionId, return: returnSubmission, gradeReceived, newAttachments, existingFileIds, removedAttachments, rubricGrades, feedback } = input;\n\n const submission = await prisma.submission.findFirst({\n where: {\n id: submissionId,\n assignment: {\n class: {\n teachers: {\n some: { id: ctx.user.id },\n },\n },\n },\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n annotations: {\n include: {\n thumbnail: true\n }\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n\n if (!submission) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Submission not found\",\n });\n }\n\n if (returnSubmission !== undefined) {\n // Toggle return status\n return await prisma.submission.update({\n where: { id: submissionId },\n data: {\n returned: !submission.returned,\n },\n include: {\n attachments: true,\n student: {\n select: {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n profilePicture: true,\n profilePictureThumbnail: true,\n },\n },\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n }\n\n // NOTE: Teacher annotation files are now handled via direct upload endpoints\n // Use getAnnotationUploadUrls and confirmAnnotationUpload endpoints instead\n // The newAttachments field is deprecated for annotations\n if (newAttachments && newAttachments.length > 0) {\n throw new TRPCError({\n code: \"BAD_REQUEST\",\n message: \"Direct file upload is deprecated. Use getAnnotationUploadUrls endpoint instead.\",\n });\n }\n\n // Connect existing files if provided\n if (existingFileIds && existingFileIds.length > 0) {\n await prisma.submission.update({\n where: { id: submission.id },\n data: {\n annotations: {\n connect: existingFileIds.map(fileId => ({ id: fileId }))\n }\n }\n });\n }\n\n // Delete removed attachments if any\n if (removedAttachments && removedAttachments.length > 0) {\n const filesToDelete = submission.annotations.filter((file) =>\n removedAttachments.includes(file.id)\n );\n\n // Delete files from storage (only if they were actually uploaded)\n await Promise.all(filesToDelete.map(async (file) => {\n try {\n // Only delete from GCS if the file was successfully uploaded\n if (file.uploadStatus === 'COMPLETED') {\n // Delete the main file\n await deleteFile(file.path);\n\n // Delete thumbnail if it exists\n if (file.thumbnail?.path) {\n await deleteFile(file.thumbnail.path);\n }\n }\n } catch (error) {\n console.warn(`Failed to delete file ${file.path}:`, error);\n }\n }));\n }\n\n // Update submission with grade and attachments\n return await prisma.submission.update({\n where: { id: submissionId },\n data: {\n ...(gradeReceived !== undefined && { gradeReceived }),\n ...(rubricGrades && { rubricState: JSON.stringify(rubricGrades) }),\n ...(feedback && { teacherComments: feedback }),\n ...(removedAttachments && removedAttachments.length > 0 && {\n annotations: {\n deleteMany: {\n id: { in: removedAttachments },\n },\n },\n }),\n ...(returnSubmission as unknown as boolean && { returned: returnSubmission }),\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n annotations: {\n include: {\n thumbnail: true\n }\n },\n student: {\n select: {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n profilePicture: true,\n profilePictureThumbnail: true,\n },\n },\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n }),\n\n attachToEvent: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n eventId: z.string(),\n }))\n .mutation(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { assignmentId, eventId } = input;\n\n // Check if assignment exists and user is a teacher of the class\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n class: {\n teachers: {\n some: { id: ctx.user.id },\n },\n },\n },\n include: {\n class: true,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found or you are not authorized\",\n });\n }\n\n // Check if event exists and belongs to the same class\n const event = await prisma.event.findFirst({\n where: {\n id: eventId,\n classId: assignment.classId,\n },\n });\n\n if (!event) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Event not found or does not belong to the same class\",\n });\n }\n\n // Attach assignment to event\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n eventAttached: {\n connect: { id: eventId }\n }\n },\n include: {\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n }\n },\n section: {\n select: {\n id: true,\n name: true\n }\n },\n teacher: {\n select: {\n id: true,\n username: true\n }\n },\n eventAttached: {\n select: {\n id: true,\n name: true,\n startTime: true,\n endTime: true,\n }\n }\n }\n });\n\n return { assignment: updatedAssignment };\n }),\n\n detachEvent: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n }))\n .mutation(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { assignmentId } = input;\n\n // Check if assignment exists and user is a teacher of the class\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n class: {\n teachers: {\n some: { id: ctx.user.id },\n },\n },\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found or you are not authorized\",\n });\n }\n\n // Detach assignment from event\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n eventAttached: {\n disconnect: true\n }\n },\n include: {\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n }\n },\n section: {\n select: {\n id: true,\n name: true\n }\n },\n teacher: {\n select: {\n id: true,\n username: true\n }\n },\n eventAttached: {\n select: {\n id: true,\n name: true,\n startTime: true,\n endTime: true,\n }\n }\n }\n });\n\n return { assignment: updatedAssignment };\n }),\n\n getAvailableEvents: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n }))\n .query(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { assignmentId } = input;\n\n // Get the assignment to find the class\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n class: {\n teachers: {\n some: { id: ctx.user.id },\n },\n },\n },\n select: { classId: true }\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found or you are not authorized\",\n });\n }\n\n // Get all events for the class that don't already have this assignment attached\n const events = await prisma.event.findMany({\n where: {\n classId: assignment.classId,\n assignmentsAttached: {\n none: {\n id: assignmentId\n }\n }\n },\n select: {\n id: true,\n name: true,\n startTime: true,\n endTime: true,\n location: true,\n remarks: true,\n },\n orderBy: {\n startTime: 'asc'\n }\n });\n\n return { events };\n }),\n\n dueToday: protectedProcedure\n .query(async ({ ctx }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const assignments = await prisma.assignment.findMany({\n where: {\n dueDate: {\n equals: new Date(),\n },\n },\n select: {\n id: true,\n title: true,\n dueDate: true,\n type: true,\n graded: true,\n maxGrade: true,\n class: {\n select: {\n id: true,\n name: true,\n }\n }\n }\n });\n\n return assignments.map(assignment => ({\n ...assignment,\n dueDate: assignment.dueDate.toISOString(),\n }));\n }),\n attachMarkScheme: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n markSchemeId: z.string().nullable(),\n }))\n .mutation(async ({ ctx, input }) => {\n const { assignmentId, markSchemeId } = input;\n\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n // If markSchemeId is provided, verify it exists\n if (markSchemeId) {\n const markScheme = await prisma.markScheme.findFirst({\n where: {\n id: markSchemeId,\n },\n });\n\n if (!markScheme) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Mark scheme not found\",\n });\n }\n }\n\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n markScheme: markSchemeId ? {\n connect: { id: markSchemeId },\n } : {\n disconnect: true,\n },\n },\n include: {\n attachments: true,\n section: true,\n teacher: true,\n eventAttached: true,\n markScheme: true,\n },\n });\n\n return updatedAssignment;\n }),\n detachMarkScheme: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n }))\n .mutation(async ({ ctx, input }) => {\n const { assignmentId } = input;\n\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n markScheme: {\n disconnect: true,\n },\n },\n include: {\n attachments: true,\n section: true,\n teacher: true,\n eventAttached: true,\n markScheme: true,\n },\n });\n\n return updatedAssignment;\n }),\n attachGradingBoundary: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n gradingBoundaryId: z.string().nullable(),\n }))\n .mutation(async ({ ctx, input }) => {\n const { assignmentId, gradingBoundaryId } = input;\n\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n // If gradingBoundaryId is provided, verify it exists\n if (gradingBoundaryId) {\n const gradingBoundary = await prisma.gradingBoundary.findFirst({\n where: {\n id: gradingBoundaryId,\n },\n });\n\n if (!gradingBoundary) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Grading boundary not found\",\n });\n }\n }\n\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n gradingBoundary: gradingBoundaryId ? {\n connect: { id: gradingBoundaryId },\n } : {\n disconnect: true,\n },\n },\n include: {\n attachments: true,\n section: true,\n teacher: true,\n eventAttached: true,\n gradingBoundary: true,\n },\n });\n\n return updatedAssignment;\n }),\n detachGradingBoundary: protectedTeacherProcedure\n .input(z.object({\n classId: z.string(),\n assignmentId: z.string(),\n }))\n .mutation(async ({ ctx, input }) => {\n const { assignmentId } = input;\n\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n gradingBoundary: {\n disconnect: true,\n },\n },\n include: {\n attachments: true,\n section: true,\n teacher: true,\n eventAttached: true,\n gradingBoundary: true,\n },\n });\n\n return updatedAssignment;\n }),\n\n // New direct upload endpoints\n getAssignmentUploadUrls: protectedTeacherProcedure\n .input(getAssignmentUploadUrlsSchema)\n .mutation(async ({ ctx, input }) => {\n const { assignmentId, classId, files } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in to upload files\",\n });\n }\n\n // Verify user is a teacher of the class\n const classData = await prisma.class.findFirst({\n where: {\n id: classId,\n teachers: {\n some: {\n id: ctx.user.id,\n },\n },\n },\n });\n\n if (!classData) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Class not found or you are not a teacher\",\n });\n }\n\n // Verify assignment exists and belongs to the class\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n classId: classId,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n // Create direct upload files\n const directUploadFiles = await createDirectUploadFiles(\n files,\n ctx.user.id,\n undefined, // No specific directory\n assignmentId\n );\n\n return {\n success: true,\n uploadFiles: directUploadFiles,\n };\n }),\n\n getSubmissionUploadUrls: protectedClassMemberProcedure\n .input(getSubmissionUploadUrlsSchema)\n .mutation(async ({ ctx, input }) => {\n const { submissionId, classId, files } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in to upload files\",\n });\n }\n\n // Verify submission exists and user has access\n const submission = await prisma.submission.findFirst({\n where: {\n id: submissionId,\n assignment: {\n classId: classId,\n },\n },\n include: {\n assignment: {\n include: {\n class: {\n include: {\n students: true,\n teachers: true,\n },\n },\n },\n },\n },\n });\n\n if (!submission) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Submission not found\",\n });\n }\n\n // Check if user is the student who owns the submission or a teacher of the class\n const isStudent = submission.studentId === ctx.user.id;\n const isTeacher = submission.assignment.class.teachers.some(teacher => teacher.id === ctx.user?.id);\n\n if (!isStudent && !isTeacher) {\n throw new TRPCError({\n code: \"FORBIDDEN\",\n message: \"You don't have permission to upload files to this submission\",\n });\n }\n\n // Create direct upload files\n const directUploadFiles = await createDirectUploadFiles(\n files,\n ctx.user.id,\n undefined, // No specific directory\n undefined, // No assignment ID\n submissionId\n );\n\n return {\n success: true,\n uploadFiles: directUploadFiles,\n };\n }),\n\n confirmAssignmentUpload: protectedTeacherProcedure\n .input(confirmAssignmentUploadSchema)\n .mutation(async ({ ctx, input }) => {\n const { fileId, uploadSuccess, errorMessage } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in\",\n });\n }\n\n // Verify file belongs to user and is an assignment file\n const file = await prisma.file.findFirst({\n where: {\n id: fileId,\n userId: ctx.user.id,\n assignment: {\n isNot: null,\n },\n },\n });\n\n if (!file) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"File not found or you don't have permission\",\n });\n }\n\n await confirmDirectUpload(fileId, uploadSuccess, errorMessage);\n\n return {\n success: true,\n message: uploadSuccess ? \"Upload confirmed successfully\" : \"Upload failed\",\n };\n }),\n\n confirmSubmissionUpload: protectedClassMemberProcedure\n .input(confirmSubmissionUploadSchema)\n .mutation(async ({ ctx, input }) => {\n const { fileId, uploadSuccess, errorMessage } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in\",\n });\n }\n\n // Verify file belongs to user and is a submission file\n const file = await prisma.file.findFirst({\n where: {\n id: fileId,\n userId: ctx.user.id,\n submission: {\n isNot: null,\n },\n },\n });\n\n if (!file) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"File not found or you don't have permission\",\n });\n }\n\n await confirmDirectUpload(fileId, uploadSuccess, errorMessage);\n\n return {\n success: true,\n message: uploadSuccess ? \"Upload confirmed successfully\" : \"Upload failed\",\n };\n }),\n\n getAnnotationUploadUrls: protectedTeacherProcedure\n .input(getAnnotationUploadUrlsSchema)\n .mutation(async ({ ctx, input }) => {\n const { submissionId, classId, files } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in to upload files\",\n });\n }\n\n // Verify submission exists and user is a teacher of the class\n const submission = await prisma.submission.findFirst({\n where: {\n id: submissionId,\n assignment: {\n classId: classId,\n class: {\n teachers: {\n some: {\n id: ctx.user.id,\n },\n },\n },\n },\n },\n });\n\n if (!submission) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Submission not found or you are not a teacher of this class\",\n });\n }\n\n // Create direct upload files for annotations\n // Note: We pass submissionId as the 5th parameter, but these are annotations not submission files\n // We need to store them separately, so we'll use a different approach\n const directUploadFiles = await createDirectUploadFiles(\n files,\n ctx.user.id,\n undefined, // No specific directory\n undefined, // No assignment ID\n undefined // Don't link to submission yet (will be linked in confirmAnnotationUpload)\n );\n\n // Store the submissionId in the file record so we can link it to annotations later\n await Promise.all(\n directUploadFiles.map(file =>\n prisma.file.update({\n where: { id: file.id },\n data: {\n annotationId: submissionId, // Store as annotation\n }\n })\n )\n );\n\n return {\n success: true,\n uploadFiles: directUploadFiles,\n };\n }),\n\n confirmAnnotationUpload: protectedTeacherProcedure\n .input(confirmAnnotationUploadSchema)\n .mutation(async ({ ctx, input }) => {\n const { fileId, uploadSuccess, errorMessage } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in\",\n });\n }\n\n // Verify file belongs to user and is an annotation file\n const file = await prisma.file.findFirst({\n where: {\n id: fileId,\n userId: ctx.user.id,\n annotationId: {\n not: null,\n },\n },\n });\n\n if (!file) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"File not found or you don't have permission\",\n });\n }\n\n await confirmDirectUpload(fileId, uploadSuccess, errorMessage);\n\n return {\n success: true,\n message: uploadSuccess ? \"Annotation upload confirmed successfully\" : \"Annotation upload failed\",\n };\n }),\n\n updateUploadProgress: protectedProcedure\n .input(updateUploadProgressSchema)\n .mutation(async ({ ctx, input }) => {\n const { fileId, progress } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in\",\n });\n }\n\n // Verify file belongs to user\n const file = await prisma.file.findFirst({\n where: {\n id: fileId,\n userId: ctx.user.id,\n },\n });\n\n if (!file) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"File not found or you don't have permission\",\n });\n }\n\n await updateUploadProgress(fileId, progress);\n\n return {\n success: true,\n progress,\n };\n }),\n});\n\n"],"names":[],"mappings":"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","debug_id":"30094775-041d-5db4-bce9-b3ae2b873b73"}
|
|
1
|
+
{"version":3,"file":"assignment.js","sources":["routers/assignment.ts"],"sourceRoot":"/","sourcesContent":["import { z } from \"zod\";\nimport { createTRPCRouter, protectedProcedure, protectedClassMemberProcedure, protectedTeacherProcedure } from \"../trpc.js\";\nimport { TRPCError } from \"@trpc/server\";\nimport { prisma } from \"../lib/prisma.js\";\nimport { createDirectUploadFiles, type DirectUploadFile, confirmDirectUpload, updateUploadProgress, type UploadedFile } from \"../lib/fileUpload.js\";\nimport { deleteFile } from \"../lib/googleCloudStorage.js\";\nimport { sendNotifications } from \"../lib/notificationHandler.js\";\nimport { logger } from \"../utils/logger.js\";\nimport { gradeWorksheetPipeline } from \"../server/pipelines/gradeWorksheet.js\";\n\n// DEPRECATED: This schema is no longer used - files are uploaded directly to GCS\n// Use directFileSchema instead\n\n// New schema for direct file uploads (no base64 data)\nconst directFileSchema = z.object({\n name: z.string(),\n type: z.string(),\n size: z.number(),\n // No data field - for direct file uploads\n});\n\nconst createAssignmentSchema = z.object({\n classId: z.string(),\n id: z.string().optional(),\n title: z.string(),\n instructions: z.string(),\n dueDate: z.string(),\n files: z.array(directFileSchema).optional(), // Use direct file schema\n existingFileIds: z.array(z.string()).optional(),\n aiPolicyLevel: z.number().default(0),\n acceptFiles: z.boolean().optional(),\n acceptExtendedResponse: z.boolean().optional(),\n acceptWorksheet: z.boolean().optional(),\n worksheetIds: z.array(z.string()).optional(),\n gradeWithAI: z.boolean().optional(),\n studentIds: z.array(z.string()).optional(),\n maxGrade: z.number().optional(),\n graded: z.boolean().optional(),\n weight: z.number().optional(),\n sectionId: z.string().optional(),\n type: z.enum(['HOMEWORK', 'QUIZ', 'TEST', 'PROJECT', 'ESSAY', 'DISCUSSION', 'PRESENTATION', 'LAB', 'OTHER']).optional(),\n markSchemeId: z.string().optional(),\n gradingBoundaryId: z.string().optional(),\n inProgress: z.boolean().optional(),\n});\n\nconst updateAssignmentSchema = z.object({\n classId: z.string(),\n id: z.string(),\n title: z.string().optional(),\n instructions: z.string().optional(),\n dueDate: z.string().optional(),\n files: z.array(directFileSchema).optional(), // Use direct file schema\n aiPolicyLevel: z.number().default(0),\n acceptFiles: z.boolean().optional(),\n acceptExtendedResponse: z.boolean().optional(),\n acceptWorksheet: z.boolean().optional(),\n worksheetIds: z.array(z.string()).optional(),\n gradeWithAI: z.boolean().optional(),\n studentIds: z.array(z.string()).optional(),\n existingFileIds: z.array(z.string()).optional(),\n removedAttachments: z.array(z.string()).optional(),\n maxGrade: z.number().optional(),\n graded: z.boolean().optional(),\n weight: z.number().optional(),\n sectionId: z.string().nullable().optional(),\n type: z.enum(['HOMEWORK', 'QUIZ', 'TEST', 'PROJECT', 'ESSAY', 'DISCUSSION', 'PRESENTATION', 'LAB', 'OTHER']).optional(),\n inProgress: z.boolean().optional(),\n});\n\nconst deleteAssignmentSchema = z.object({\n id: z.string(),\n classId: z.string(),\n});\n\nconst getAssignmentSchema = z.object({\n id: z.string(),\n classId: z.string(),\n});\n\nconst submissionSchema = z.object({\n assignmentId: z.string(),\n classId: z.string(),\n submissionId: z.string(),\n submit: z.boolean().optional(),\n newAttachments: z.array(directFileSchema).optional(), // Use direct file schema\n extendedResponse: z.string().optional(),\n existingFileIds: z.array(z.string()).optional(),\n removedAttachments: z.array(z.string()).optional(),\n});\n\nconst updateSubmissionSchema = z.object({\n assignmentId: z.string(),\n classId: z.string(),\n submissionId: z.string(),\n return: z.boolean().optional(),\n gradeReceived: z.number().nullable().optional(),\n newAttachments: z.array(directFileSchema).optional(), // Use direct file schema\n existingFileIds: z.array(z.string()).optional(),\n removedAttachments: z.array(z.string()).optional(),\n feedback: z.string().optional(),\n rubricGrades: z.array(z.object({\n criteriaId: z.string(),\n selectedLevelId: z.string(),\n points: z.number(),\n comments: z.string(),\n })).optional(),\n});\n\n// New schemas for direct upload functionality\nconst getAssignmentUploadUrlsSchema = z.object({\n assignmentId: z.string(),\n classId: z.string(),\n files: z.array(directFileSchema),\n});\n\nconst getSubmissionUploadUrlsSchema = z.object({\n submissionId: z.string(),\n classId: z.string(),\n files: z.array(directFileSchema),\n});\n\nconst confirmAssignmentUploadSchema = z.object({\n fileId: z.string(),\n uploadSuccess: z.boolean(),\n errorMessage: z.string().optional(),\n});\n\nconst confirmSubmissionUploadSchema = z.object({\n fileId: z.string(),\n uploadSuccess: z.boolean(),\n errorMessage: z.string().optional(),\n});\n\nconst getAnnotationUploadUrlsSchema = z.object({\n submissionId: z.string(),\n classId: z.string(),\n files: z.array(directFileSchema),\n});\n\nconst confirmAnnotationUploadSchema = z.object({\n fileId: z.string(),\n uploadSuccess: z.boolean(),\n errorMessage: z.string().optional(),\n});\n\nconst updateUploadProgressSchema = z.object({\n fileId: z.string(),\n progress: z.number().min(0).max(100),\n});\n\n// Helper function to get unified list of sections and assignments for a class\nasync function getUnifiedList(tx: any, classId: string) {\n const [sections, assignments] = await Promise.all([\n tx.section.findMany({\n where: { classId },\n select: { id: true, order: true },\n }),\n tx.assignment.findMany({\n where: { classId },\n select: { id: true, order: true },\n }),\n ]);\n\n // Combine and sort by order\n const unified = [\n ...sections.map((s: any) => ({ id: s.id, order: s.order, type: 'section' as const })),\n ...assignments.map((a: any) => ({ id: a.id, order: a.order, type: 'assignment' as const })),\n ].sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER));\n\n return unified;\n}\n\n// Helper function to normalize unified list to 1..n\n// Updated to batch updates to prevent timeouts with large lists\nasync function normalizeUnifiedList(tx: any, classId: string, orderedItems: Array<{ id: string; type: 'section' | 'assignment' }>) {\n const BATCH_SIZE = 10; // Process 10 items at a time to avoid overwhelming the transaction\n\n // Group items by type for more efficient updates\n const sections: Array<{ id: string; order: number }> = [];\n const assignments: Array<{ id: string; order: number }> = [];\n\n orderedItems.forEach((item, index) => {\n const orderData = { id: item.id, order: index + 1 };\n if (item.type === 'section') {\n sections.push(orderData);\n } else {\n assignments.push(orderData);\n }\n });\n\n // Process updates in batches\n const processBatch = async (items: Array<{ id: string; order: number }>, type: 'section' | 'assignment') => {\n for (let i = 0; i < items.length; i += BATCH_SIZE) {\n const batch = items.slice(i, i + BATCH_SIZE);\n await Promise.all(\n batch.map(item => {\n if (type === 'section') {\n return tx.section.update({ where: { id: item.id }, data: { order: item.order } });\n } else {\n return tx.assignment.update({ where: { id: item.id }, data: { order: item.order } });\n }\n })\n );\n }\n };\n\n // Process sections and assignments sequentially to avoid transaction overload\n await processBatch(sections, 'section');\n await processBatch(assignments, 'assignment');\n}\n\nexport const assignmentRouter = createTRPCRouter({\n // Reorder an assignment within the unified list (sections + assignments)\n reorder: protectedTeacherProcedure\n .input(z.object({\n classId: z.string(),\n movedId: z.string(),\n // One of: place at start/end of unified list, or relative to targetId (can be section or assignment)\n position: z.enum(['start', 'end', 'before', 'after']),\n targetId: z.string().optional(), // Can be a section ID or assignment ID\n }))\n .mutation(async ({ ctx, input }) => {\n const { classId, movedId, position, targetId } = input;\n\n const moved = await prisma.assignment.findFirst({\n where: { id: movedId, classId },\n select: { id: true, classId: true },\n });\n\n if (!moved) {\n throw new TRPCError({ code: 'NOT_FOUND', message: 'Assignment not found' });\n }\n\n if ((position === 'before' || position === 'after') && !targetId) {\n throw new TRPCError({ code: 'BAD_REQUEST', message: 'targetId required for before/after' });\n }\n\n const result = await prisma.$transaction(async (tx) => {\n const unified = await getUnifiedList(tx, classId);\n\n // Find moved item and target in unified list\n const movedIdx = unified.findIndex(item => item.id === movedId && item.type === 'assignment');\n if (movedIdx === -1) {\n throw new TRPCError({ code: 'NOT_FOUND', message: 'Assignment not found in unified list' });\n }\n\n // Build list without moved item\n const withoutMoved = unified.filter(item => !(item.id === movedId && item.type === 'assignment'));\n\n let next: Array<{ id: string; type: 'section' | 'assignment' }> = [];\n\n if (position === 'start') {\n next = [{ id: movedId, type: 'assignment' }, ...withoutMoved.map(item => ({ id: item.id, type: item.type }))];\n } else if (position === 'end') {\n next = [...withoutMoved.map(item => ({ id: item.id, type: item.type })), { id: movedId, type: 'assignment' }];\n } else {\n const targetIdx = withoutMoved.findIndex(item => item.id === targetId);\n if (targetIdx === -1) {\n throw new TRPCError({ code: 'BAD_REQUEST', message: 'targetId not found in unified list' });\n }\n if (position === 'before') {\n next = [\n ...withoutMoved.slice(0, targetIdx).map(item => ({ id: item.id, type: item.type })),\n { id: movedId, type: 'assignment' },\n ...withoutMoved.slice(targetIdx).map(item => ({ id: item.id, type: item.type })),\n ];\n } else {\n next = [\n ...withoutMoved.slice(0, targetIdx + 1).map(item => ({ id: item.id, type: item.type })),\n { id: movedId, type: 'assignment' },\n ...withoutMoved.slice(targetIdx + 1).map(item => ({ id: item.id, type: item.type })),\n ];\n }\n }\n\n // Normalize to 1..n\n await normalizeUnifiedList(tx, classId, next);\n\n return tx.assignment.findUnique({ where: { id: movedId } });\n }, {\n maxWait: 10000, // 10 seconds max wait time\n timeout: 30000, // 30 seconds timeout for reordering operations\n });\n\n return result;\n }),\n order: protectedTeacherProcedure\n .input(z.object({\n id: z.string(),\n classId: z.string(),\n order: z.number(),\n }))\n .mutation(async ({ ctx, input }) => {\n // Deprecated: prefer `reorder`. For backward-compatibility, set the order then normalize unified list.\n const { id, order } = input;\n\n const current = await prisma.assignment.findUnique({\n where: { id },\n select: { id: true, classId: true },\n });\n\n if (!current) {\n throw new TRPCError({ code: 'NOT_FOUND', message: 'Assignment not found' });\n }\n\n const updated = await prisma.$transaction(async (tx) => {\n await tx.assignment.update({ where: { id }, data: { order } });\n\n // Normalize entire unified list\n const unified = await getUnifiedList(tx, current.classId);\n await normalizeUnifiedList(tx, current.classId, unified.map(item => ({ id: item.id, type: item.type })));\n\n return tx.assignment.findUnique({ where: { id } });\n }, {\n maxWait: 10000, // 10 seconds max wait time\n timeout: 30000, // 30 seconds timeout for reordering operations\n });\n\n return updated;\n }),\n\n exists: protectedClassMemberProcedure\n .input(z.object({\n id: z.string(),\n }))\n .query(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({ code: 'UNAUTHORIZED', message: 'User must be authenticated' });\n }\n const assignment = await prisma.assignment.findUnique({\n where: { id: input.id },\n });\n \n return assignment ? true : false;\n }),\n move: protectedTeacherProcedure\n .input(z.object({\n id: z.string(),\n classId: z.string(),\n targetSectionId: z.string().nullable().optional(),\n }))\n .mutation(async ({ ctx, input }) => {\n const { id } = input;\n const targetSectionId = (input.targetSectionId ?? null) || null; // normalize empty string to null\n\n const moved = await prisma.assignment.findUnique({\n where: { id },\n select: { id: true, classId: true, sectionId: true },\n });\n\n if (!moved) {\n throw new TRPCError({ code: 'NOT_FOUND', message: 'Assignment not found' });\n }\n\n const updated = await prisma.$transaction(async (tx) => {\n // Update sectionId first\n await tx.assignment.update({ where: { id }, data: { sectionId: targetSectionId } });\n\n // The unified list ordering remains the same, just the assignment's sectionId changed\n // No need to reorder since we're keeping the same position in the unified list\n // If frontend wants to change position, they should call reorder after move\n\n return tx.assignment.findUnique({ where: { id } });\n }, {\n maxWait: 5000, // 5 seconds max wait time\n timeout: 10000, // 10 seconds timeout\n });\n\n return updated;\n }),\n\n create: protectedTeacherProcedure\n .input(createAssignmentSchema)\n .mutation(async ({ ctx, input }) => {\n const { classId, id, title, instructions, dueDate, files, existingFileIds, aiPolicyLevel, acceptFiles, acceptExtendedResponse, acceptWorksheet, worksheetIds, gradeWithAI, studentIds, maxGrade, graded, weight, sectionId, type, markSchemeId, gradingBoundaryId, inProgress } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n // Pre-fetch data needed for the transaction (outside transaction scope)\n const [classData, rubricData] = await Promise.all([\n prisma.class.findUnique({\n where: { id: classId },\n include: {\n students: {\n select: { id: true }\n }\n }\n }),\n markSchemeId ? prisma.markScheme.findUnique({\n where: { id: markSchemeId },\n select: {\n structured: true,\n }\n }) : null\n ]);\n\n if (!classData) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Class not found\",\n });\n }\n\n // Calculate max grade outside transaction\n let computedMaxGrade = maxGrade;\n if (markSchemeId && rubricData) {\n const parsedRubric = JSON.parse(rubricData.structured || \"{}\");\n computedMaxGrade = parsedRubric.criteria.reduce((acc: number, criterion: any) => {\n const maxPoints = Math.max(...criterion.levels.map((level: any) => level.points));\n return acc + maxPoints;\n }, 0);\n }\n\n // Prepare submission data outside transaction\n const submissionData = studentIds && studentIds.length > 0\n ? studentIds.map((studentId) => ({\n student: { connect: { id: studentId } }\n }))\n : classData.students.map((student) => ({\n student: { connect: { id: student.id } }\n }));\n\n const teacherId = ctx.user.id;\n\n // Minimal transaction - only for critical operations\n const assignment = await prisma.$transaction(async (tx) => {\n // Create assignment with order 0 (will be at top)\n const created = await tx.assignment.create({\n data: {\n ...(id && { id }),\n title,\n instructions,\n dueDate: new Date(dueDate),\n maxGrade: markSchemeId ? computedMaxGrade : maxGrade,\n graded,\n weight,\n type,\n ...(aiPolicyLevel && { aiPolicyLevel }),\n acceptFiles,\n acceptExtendedResponse,\n acceptWorksheet,\n ...(worksheetIds && {\n worksheets: {\n connect: worksheetIds.map(id => ({ id }))\n }\n }),\n gradeWithAI,\n ...(studentIds && {\n assignedTo: {\n connect: studentIds.map(id => ({ id }))\n }\n }),\n order: 0, // Set to 0 to place at top\n inProgress: inProgress || false,\n class: {\n connect: { id: classId }\n },\n ...(sectionId && {\n section: {\n connect: { id: sectionId }\n }\n }),\n ...(markSchemeId && {\n markScheme: {\n connect: { id: markSchemeId }\n }\n }),\n ...(gradingBoundaryId && {\n gradingBoundary: {\n connect: { id: gradingBoundaryId }\n }\n }),\n submissions: {\n create: submissionData\n },\n teacher: {\n connect: { id: teacherId }\n }\n },\n select: {\n id: true,\n title: true,\n instructions: true,\n dueDate: true,\n maxGrade: true,\n graded: true,\n weight: true,\n type: true,\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n }\n },\n section: {\n select: {\n id: true,\n name: true\n }\n },\n teacher: {\n select: {\n id: true,\n username: true\n }\n },\n class: {\n select: {\n id: true,\n name: true\n }\n }\n }\n });\n\n // Optimized reordering - only increment existing items by 1\n // This is much faster than reordering everything\n await tx.assignment.updateMany({\n where: {\n classId: classId,\n id: { not: created.id },\n },\n data: {\n order: { increment: 1 }\n }\n });\n\n await tx.section.updateMany({\n where: {\n classId: classId,\n },\n data: {\n order: { increment: 1 }\n }\n });\n\n // Update the created assignment to have order 1\n await tx.assignment.update({\n where: { id: created.id },\n data: { order: 1 }\n });\n\n return created;\n }, {\n maxWait: 10000, // Increased to 10 seconds max wait time\n timeout: 20000, // Increased to 20 seconds timeout for safety\n });\n\n // Handle file operations outside transaction\n const fileOperations: Promise<any>[] = [];\n\n // Process direct upload files\n if (files && files.length > 0) {\n fileOperations.push(\n createDirectUploadFiles(files, ctx.user.id, undefined, assignment.id)\n .then(uploadedFiles => {\n if (uploadedFiles.length > 0) {\n return prisma.assignment.update({\n where: { id: assignment.id },\n data: {\n attachments: {\n create: uploadedFiles.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n path: file.path,\n }))\n }\n }\n });\n }\n })\n );\n }\n\n // Connect existing files\n if (existingFileIds && existingFileIds.length > 0) {\n fileOperations.push(\n prisma.assignment.update({\n where: { id: assignment.id },\n data: {\n attachments: {\n connect: existingFileIds.map(fileId => ({ id: fileId }))\n }\n }\n })\n );\n }\n\n // Execute file operations in parallel\n await Promise.all(fileOperations);\n\n // Send notifications asynchronously (non-blocking)\n sendNotifications(classData.students.map(student => student.id), {\n title: `🔔 New assignment for ${classData.name}`,\n content:\n `The assignment \"${title}\" has been created in ${classData.name}.\\n\n Due date: ${new Date(dueDate).toLocaleDateString()}.\n [Link to assignment](/class/${classId}/assignments/${assignment.id})`\n }).catch(error => {\n logger.error('Failed to send assignment notifications:', error);\n });\n\n return assignment;\n }),\n update: protectedTeacherProcedure\n .input(updateAssignmentSchema)\n .mutation(async ({ ctx, input }) => {\n const { id, title, instructions, dueDate, files, existingFileIds, worksheetIds, aiPolicyLevel, maxGrade, graded, weight, sectionId, type, inProgress, acceptFiles, acceptExtendedResponse, acceptWorksheet, gradeWithAI, studentIds } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n // Pre-fetch all necessary data outside transaction\n const [assignment, classData] = await Promise.all([\n prisma.assignment.findFirst({\n where: {\n id,\n teacherId: ctx.user.id,\n },\n include: {\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n path: true,\n size: true,\n uploadStatus: true,\n thumbnail: {\n select: {\n path: true\n }\n }\n },\n },\n class: {\n select: {\n id: true,\n name: true\n }\n },\n markScheme: true,\n },\n }),\n prisma.class.findFirst({\n where: {\n assignments: {\n some: { id }\n }\n },\n include: {\n students: {\n select: { id: true }\n }\n }\n })\n ]);\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n // Prepare submission data outside transaction if needed\n const submissionData = studentIds && studentIds.length > 0\n ? studentIds.map((studentId) => ({\n student: { connect: { id: studentId } }\n }))\n : classData?.students.map((student) => ({\n student: { connect: { id: student.id } }\n }));\n\n // Handle file deletion operations outside transaction\n const fileDeletionPromises: Promise<void>[] = [];\n if (input.removedAttachments && input.removedAttachments.length > 0) {\n const filesToDelete = assignment.attachments.filter((file) =>\n input.removedAttachments!.includes(file.id)\n );\n\n filesToDelete.forEach((file) => {\n if (file.uploadStatus === 'COMPLETED') {\n fileDeletionPromises.push(\n deleteFile(file.path).catch(error => {\n console.warn(`Failed to delete file ${file.path}:`, error);\n })\n );\n if (file.thumbnail?.path) {\n fileDeletionPromises.push(\n deleteFile(file.thumbnail.path).catch(error => {\n console.warn(`Failed to delete thumbnail ${file.thumbnail!.path}:`, error);\n })\n );\n }\n }\n });\n }\n\n // Execute file deletions in parallel\n await Promise.all(fileDeletionPromises);\n\n // Prepare file upload operations\n let uploadedFiles: UploadedFile[] = [];\n if (files && files.length > 0) {\n uploadedFiles = await createDirectUploadFiles(files, ctx.user.id, undefined, input.id);\n }\n\n // Minimal transaction for database update\n const updatedAssignment = await prisma.$transaction(async (tx) => {\n return tx.assignment.update({\n where: { id },\n data: {\n ...(title && { title }),\n ...(instructions && { instructions }),\n ...(dueDate && { dueDate: new Date(dueDate) }),\n ...(maxGrade && { maxGrade }),\n ...(graded !== undefined && { graded }),\n ...(weight && { weight }),\n ...(type && { type }),\n ...(inProgress !== undefined && { inProgress }),\n ...(acceptFiles !== undefined && { acceptFiles }),\n ...(acceptExtendedResponse !== undefined && { acceptExtendedResponse }),\n ...(acceptWorksheet !== undefined && { acceptWorksheet }),\n ...(gradeWithAI !== undefined && { gradeWithAI }),\n ...(studentIds && {\n assignedTo: {\n set: [], // Clear existing\n connect: studentIds.map(id => ({ id }))\n }\n }),\n ...(submissionData && {\n submissions: {\n deleteMany: {}, // Clear existing submissions\n create: submissionData\n }\n }),\n ...(aiPolicyLevel !== undefined && { aiPolicyLevel }),\n ...(sectionId !== undefined && {\n section: sectionId ? {\n connect: { id: sectionId }\n } : {\n disconnect: true\n }\n }),\n ...(worksheetIds && {\n worksheets: {\n set: [], // Clear existing\n connect: worksheetIds.map(id => ({ id }))\n }\n }),\n ...(uploadedFiles.length > 0 && {\n attachments: {\n create: uploadedFiles.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n path: file.path,\n ...(file.thumbnailId && {\n thumbnail: {\n connect: { id: file.thumbnailId }\n }\n })\n }))\n }\n }),\n ...(existingFileIds && existingFileIds.length > 0 && {\n attachments: {\n connect: existingFileIds.map(fileId => ({ id: fileId }))\n }\n }),\n ...(input.removedAttachments && input.removedAttachments.length > 0 && {\n attachments: {\n deleteMany: {\n id: { in: input.removedAttachments }\n }\n }\n }),\n },\n select: {\n id: true,\n title: true,\n instructions: true,\n dueDate: true,\n maxGrade: true,\n graded: true,\n weight: true,\n type: true,\n createdAt: true,\n markSchemeId: true,\n submissions: {\n select: {\n student: {\n select: {\n id: true,\n username: true\n }\n }\n }\n },\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n thumbnail: true,\n size: true,\n path: true,\n uploadedAt: true,\n thumbnailId: true,\n }\n },\n section: true,\n teacher: true,\n class: true\n }\n });\n }, {\n maxWait: 5000, // 5 seconds max wait time\n timeout: 10000, // 10 seconds timeout\n });\n\n // Handle rubric max grade calculation outside transaction\n if (updatedAssignment.markSchemeId) {\n prisma.markScheme.findUnique({\n where: { id: updatedAssignment.markSchemeId },\n select: {\n structured: true,\n }\n }).then(rubric => {\n if (rubric) {\n const parsedRubric = JSON.parse(rubric.structured || \"{}\");\n const computedMaxGrade = parsedRubric.criteria?.reduce((acc: number, criterion: any) => {\n const maxPoints = Math.max(...criterion.levels.map((level: any) => level.points));\n return acc + maxPoints;\n }, 0) || 0;\n\n return prisma.assignment.update({\n where: { id },\n data: {\n maxGrade: computedMaxGrade,\n }\n });\n }\n }).catch(error => {\n logger.error('Failed to update max grade from rubric:', error);\n });\n }\n\n return updatedAssignment;\n }),\n\n delete: protectedProcedure\n .input(deleteAssignmentSchema)\n .mutation(async ({ ctx, input }) => {\n const { id, classId } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n // Get the assignment with all related files\n const assignment = await prisma.assignment.findFirst({\n where: {\n id,\n teacherId: ctx.user.id,\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n submissions: {\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n annotations: {\n include: {\n thumbnail: true\n }\n }\n }\n }\n }\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n // Delete all files from storage\n const filesToDelete = [\n ...assignment.attachments,\n ...assignment.submissions.flatMap(sub => [...sub.attachments, ...sub.annotations])\n ];\n\n // Delete files from storage (only if they were actually uploaded)\n await Promise.all(filesToDelete.map(async (file) => {\n try {\n // Only delete from GCS if the file was successfully uploaded\n if (file.uploadStatus === 'COMPLETED') {\n // Delete the main file\n await deleteFile(file.path);\n\n // Delete thumbnail if it exists\n if (file.thumbnail) {\n await deleteFile(file.thumbnail.path);\n }\n }\n } catch (error) {\n console.warn(`Failed to delete file ${file.path}:`, error);\n }\n }));\n\n // Delete the assignment (this will cascade delete all related records)\n await prisma.assignment.delete({\n where: { id },\n });\n\n return {\n id,\n };\n }),\n\n get: protectedClassMemberProcedure\n .input(getAssignmentSchema)\n .query(async ({ ctx, input }) => {\n const { id, classId } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const assignment = await prisma.assignment.findUnique({\n where: {\n id,\n // classId,\n },\n include: {\n submissions: {\n select: {\n student: {\n select: {\n id: true,\n username: true\n }\n }\n }\n },\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n size: true,\n path: true,\n uploadedAt: true,\n thumbnailId: true,\n }\n },\n section: {\n select: {\n id: true,\n name: true,\n }\n },\n teacher: {\n select: {\n id: true,\n username: true\n }\n },\n worksheets: {\n select: {\n id: true,\n name: true,\n }\n },\n class: {\n select: {\n id: true,\n name: true\n }\n },\n eventAttached: {\n select: {\n id: true,\n name: true,\n startTime: true,\n endTime: true,\n location: true,\n remarks: true,\n }\n },\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n }\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n const sections = await prisma.section.findMany({\n where: {\n classId: assignment.classId,\n },\n select: {\n id: true,\n name: true,\n },\n });\n\n return { ...assignment, sections };\n }),\n\n getSubmission: protectedClassMemberProcedure\n .input(z.object({\n assignmentId: z.string(),\n classId: z.string(),\n }))\n .query(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { assignmentId } = input;\n\n const submission = await prisma.submission.findFirst({\n where: {\n assignmentId,\n studentId: ctx.user.id,\n },\n include: {\n attachments: true,\n student: {\n select: {\n id: true,\n username: true,\n profile: true,\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n worksheets: {\n select: {\n id: true,\n name: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n annotations: true,\n },\n });\n\n if (!submission) {\n // Create a new submission if it doesn't exist\n return await prisma.submission.create({\n data: {\n assignment: {\n connect: { id: assignmentId },\n },\n student: {\n connect: { id: ctx.user.id },\n },\n },\n include: {\n attachments: true,\n annotations: true,\n student: {\n select: {\n id: true,\n username: true,\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n }\n\n return {\n ...submission,\n late: submission.assignment.dueDate < new Date(),\n };\n }),\n\n getSubmissionById: protectedClassMemberProcedure\n .input(z.object({\n classId: z.string(),\n submissionId: z.string(),\n }))\n .query(async ({ ctx, input }) => {\n const { submissionId, classId } = input;\n\n const submission = await prisma.submission.findFirst({\n where: {\n id: submissionId,\n assignment: {\n classId,\n class: {\n OR: [\n {\n teachers: {\n some: {\n id: ctx.user?.id\n }\n }\n },\n {\n students: {\n some: {\n id: ctx.user?.id\n }\n }\n }\n ],\n }\n },\n },\n include: {\n attachments: true,\n annotations: true,\n student: {\n select: {\n id: true,\n username: true,\n profile: true,\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n },\n worksheets: {\n select: {\n id: true,\n name: true,\n }\n }\n },\n },\n },\n });\n\n if (!submission) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Submission not found\",\n });\n }\n\n return {\n ...submission,\n late: submission.assignment.dueDate < new Date(),\n };\n }),\n\n updateSubmission: protectedClassMemberProcedure\n .input(submissionSchema)\n .mutation(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { submissionId, submit, newAttachments, existingFileIds, removedAttachments, extendedResponse } = input;\n\n const submission = await prisma.submission.findFirst({\n where: {\n id: submissionId,\n OR: [\n {\n student: {\n id: ctx.user.id,\n },\n },\n {\n assignment: {\n class: {\n teachers: {\n some: {\n id: ctx.user.id,\n },\n },\n },\n },\n },\n ],\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n\n if (!submission) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Submission not found\",\n });\n }\n\n if (submit !== undefined) {\n // Toggle submission status\n if (submission.assignment.acceptWorksheet && submission.assignment.gradeWithAI) {\n\n // Grade the submission with AI\n const worksheetResponses = await prisma.studentWorksheetResponse.findMany({\n where: {\n submissionId: submission.id,\n },\n });\n\n for (const worksheetResponse of worksheetResponses) {\n // Run it in the background, non-blocking\n gradeWorksheetPipeline(worksheetResponse.id);\n }\n }\n return await prisma.submission.update({\n where: { id: submission.id },\n data: {\n submitted: !submission.submitted,\n submittedAt: new Date(),\n },\n include: {\n attachments: true,\n student: {\n select: {\n id: true,\n username: true,\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n }\n\n let uploadedFiles: UploadedFile[] = [];\n if (newAttachments && newAttachments.length > 0) {\n // Store files in a class and assignment specific directory\n uploadedFiles = await createDirectUploadFiles(newAttachments, ctx.user.id, undefined, undefined, submission.id);\n }\n\n // Update submission with new file attachments\n if (uploadedFiles.length > 0) {\n await prisma.submission.update({\n where: { id: submission.id },\n data: {\n attachments: {\n create: uploadedFiles.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n path: file.path,\n ...(file.thumbnailId && {\n thumbnail: {\n connect: { id: file.thumbnailId }\n }\n })\n }))\n }\n }\n });\n }\n\n // Connect existing files if provided\n if (existingFileIds && existingFileIds.length > 0) {\n await prisma.submission.update({\n where: { id: submission.id },\n data: {\n attachments: {\n connect: existingFileIds.map(fileId => ({ id: fileId }))\n }\n }\n });\n }\n\n // Delete removed attachments if any\n if (removedAttachments && removedAttachments.length > 0) {\n const filesToDelete = submission.attachments.filter((file) =>\n removedAttachments.includes(file.id)\n );\n\n // Delete files from storage (only if they were actually uploaded)\n await Promise.all(filesToDelete.map(async (file) => {\n try {\n // Only delete from GCS if the file was successfully uploaded\n if (file.uploadStatus === 'COMPLETED') {\n // Delete the main file\n await deleteFile(file.path);\n\n // Delete thumbnail if it exists\n if (file.thumbnail?.path) {\n await deleteFile(file.thumbnail.path);\n }\n }\n } catch (error) {\n console.warn(`Failed to delete file ${file.path}:`, error);\n }\n }));\n }\n\n // Update submission with attachments\n return await prisma.submission.update({\n where: { id: submission.id },\n data: {\n ...(removedAttachments && removedAttachments.length > 0 && {\n attachments: {\n deleteMany: {\n id: { in: removedAttachments },\n },\n },\n }),\n ...(extendedResponse !== undefined && { extendedResponse }),\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n student: {\n select: {\n id: true,\n username: true,\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n }),\n\n getSubmissions: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n classId: z.string(),\n }))\n .query(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { assignmentId } = input;\n\n const submissions = await prisma.submission.findMany({\n where: {\n assignment: {\n id: assignmentId,\n class: {\n teachers: {\n some: { id: ctx.user.id },\n },\n },\n },\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n student: {\n select: {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n profilePicture: true,\n profilePictureThumbnail: true,\n },\n },\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n\n return submissions.map(submission => ({\n ...submission,\n late: submission.assignment.dueDate < new Date(),\n }));\n }),\n\n updateSubmissionAsTeacher: protectedTeacherProcedure\n .input(updateSubmissionSchema)\n .mutation(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { submissionId, return: returnSubmission, gradeReceived, newAttachments, existingFileIds, removedAttachments, rubricGrades, feedback } = input;\n\n const submission = await prisma.submission.findFirst({\n where: {\n id: submissionId,\n assignment: {\n class: {\n teachers: {\n some: { id: ctx.user.id },\n },\n },\n },\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n annotations: {\n include: {\n thumbnail: true\n }\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n\n if (!submission) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Submission not found\",\n });\n }\n\n if (returnSubmission !== undefined) {\n // Toggle return status\n return await prisma.submission.update({\n where: { id: submissionId },\n data: {\n returned: !submission.returned,\n },\n include: {\n attachments: true,\n student: {\n select: {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n profilePicture: true,\n profilePictureThumbnail: true,\n },\n },\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n }\n\n // NOTE: Teacher annotation files are now handled via direct upload endpoints\n // Use getAnnotationUploadUrls and confirmAnnotationUpload endpoints instead\n // The newAttachments field is deprecated for annotations\n if (newAttachments && newAttachments.length > 0) {\n throw new TRPCError({\n code: \"BAD_REQUEST\",\n message: \"Direct file upload is deprecated. Use getAnnotationUploadUrls endpoint instead.\",\n });\n }\n\n // Connect existing files if provided\n if (existingFileIds && existingFileIds.length > 0) {\n await prisma.submission.update({\n where: { id: submission.id },\n data: {\n annotations: {\n connect: existingFileIds.map(fileId => ({ id: fileId }))\n }\n }\n });\n }\n\n // Delete removed attachments if any\n if (removedAttachments && removedAttachments.length > 0) {\n const filesToDelete = submission.annotations.filter((file) =>\n removedAttachments.includes(file.id)\n );\n\n // Delete files from storage (only if they were actually uploaded)\n await Promise.all(filesToDelete.map(async (file) => {\n try {\n // Only delete from GCS if the file was successfully uploaded\n if (file.uploadStatus === 'COMPLETED') {\n // Delete the main file\n await deleteFile(file.path);\n\n // Delete thumbnail if it exists\n if (file.thumbnail?.path) {\n await deleteFile(file.thumbnail.path);\n }\n }\n } catch (error) {\n console.warn(`Failed to delete file ${file.path}:`, error);\n }\n }));\n }\n\n // Update submission with grade and attachments\n return await prisma.submission.update({\n where: { id: submissionId },\n data: {\n ...(gradeReceived !== undefined && { gradeReceived }),\n ...(rubricGrades && { rubricState: JSON.stringify(rubricGrades) }),\n ...(feedback && { teacherComments: feedback }),\n ...(removedAttachments && removedAttachments.length > 0 && {\n annotations: {\n deleteMany: {\n id: { in: removedAttachments },\n },\n },\n }),\n ...(returnSubmission as unknown as boolean && { returned: returnSubmission }),\n },\n include: {\n attachments: {\n include: {\n thumbnail: true\n }\n },\n annotations: {\n include: {\n thumbnail: true\n }\n },\n student: {\n select: {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n profilePicture: true,\n profilePictureThumbnail: true,\n },\n },\n },\n },\n assignment: {\n include: {\n class: true,\n markScheme: {\n select: {\n id: true,\n structured: true,\n }\n },\n gradingBoundary: {\n select: {\n id: true,\n structured: true,\n }\n }\n },\n },\n },\n });\n }),\n\n attachToEvent: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n eventId: z.string(),\n }))\n .mutation(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { assignmentId, eventId } = input;\n\n // Check if assignment exists and user is a teacher of the class\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n class: {\n teachers: {\n some: { id: ctx.user.id },\n },\n },\n },\n include: {\n class: true,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found or you are not authorized\",\n });\n }\n\n // Check if event exists and belongs to the same class\n const event = await prisma.event.findFirst({\n where: {\n id: eventId,\n classId: assignment.classId,\n },\n });\n\n if (!event) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Event not found or does not belong to the same class\",\n });\n }\n\n // Attach assignment to event\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n eventAttached: {\n connect: { id: eventId }\n }\n },\n include: {\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n }\n },\n section: {\n select: {\n id: true,\n name: true\n }\n },\n teacher: {\n select: {\n id: true,\n username: true\n }\n },\n eventAttached: {\n select: {\n id: true,\n name: true,\n startTime: true,\n endTime: true,\n }\n }\n }\n });\n\n return { assignment: updatedAssignment };\n }),\n\n detachEvent: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n }))\n .mutation(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { assignmentId } = input;\n\n // Check if assignment exists and user is a teacher of the class\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n class: {\n teachers: {\n some: { id: ctx.user.id },\n },\n },\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found or you are not authorized\",\n });\n }\n\n // Detach assignment from event\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n eventAttached: {\n disconnect: true\n }\n },\n include: {\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n }\n },\n section: {\n select: {\n id: true,\n name: true\n }\n },\n teacher: {\n select: {\n id: true,\n username: true\n }\n },\n eventAttached: {\n select: {\n id: true,\n name: true,\n startTime: true,\n endTime: true,\n }\n }\n }\n });\n\n return { assignment: updatedAssignment };\n }),\n\n getAvailableEvents: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n }))\n .query(async ({ ctx, input }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const { assignmentId } = input;\n\n // Get the assignment to find the class\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n class: {\n teachers: {\n some: { id: ctx.user.id },\n },\n },\n },\n select: { classId: true }\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found or you are not authorized\",\n });\n }\n\n // Get all events for the class that don't already have this assignment attached\n const events = await prisma.event.findMany({\n where: {\n classId: assignment.classId,\n assignmentsAttached: {\n none: {\n id: assignmentId\n }\n }\n },\n select: {\n id: true,\n name: true,\n startTime: true,\n endTime: true,\n location: true,\n remarks: true,\n },\n orderBy: {\n startTime: 'asc'\n }\n });\n\n return { events };\n }),\n\n dueToday: protectedProcedure\n .query(async ({ ctx }) => {\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"User must be authenticated\",\n });\n }\n\n const assignments = await prisma.assignment.findMany({\n where: {\n dueDate: {\n equals: new Date(),\n },\n },\n select: {\n id: true,\n title: true,\n dueDate: true,\n type: true,\n graded: true,\n maxGrade: true,\n class: {\n select: {\n id: true,\n name: true,\n }\n }\n }\n });\n\n return assignments.map(assignment => ({\n ...assignment,\n dueDate: assignment.dueDate.toISOString(),\n }));\n }),\n attachMarkScheme: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n markSchemeId: z.string().nullable(),\n }))\n .mutation(async ({ ctx, input }) => {\n const { assignmentId, markSchemeId } = input;\n\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n // If markSchemeId is provided, verify it exists\n if (markSchemeId) {\n const markScheme = await prisma.markScheme.findFirst({\n where: {\n id: markSchemeId,\n },\n });\n\n if (!markScheme) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Mark scheme not found\",\n });\n }\n }\n\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n markScheme: markSchemeId ? {\n connect: { id: markSchemeId },\n } : {\n disconnect: true,\n },\n },\n include: {\n attachments: true,\n section: true,\n teacher: true,\n eventAttached: true,\n markScheme: true,\n },\n });\n\n return updatedAssignment;\n }),\n detachMarkScheme: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n }))\n .mutation(async ({ ctx, input }) => {\n const { assignmentId } = input;\n\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n markScheme: {\n disconnect: true,\n },\n },\n include: {\n attachments: true,\n section: true,\n teacher: true,\n eventAttached: true,\n markScheme: true,\n },\n });\n\n return updatedAssignment;\n }),\n attachGradingBoundary: protectedTeacherProcedure\n .input(z.object({\n assignmentId: z.string(),\n gradingBoundaryId: z.string().nullable(),\n }))\n .mutation(async ({ ctx, input }) => {\n const { assignmentId, gradingBoundaryId } = input;\n\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n // If gradingBoundaryId is provided, verify it exists\n if (gradingBoundaryId) {\n const gradingBoundary = await prisma.gradingBoundary.findFirst({\n where: {\n id: gradingBoundaryId,\n },\n });\n\n if (!gradingBoundary) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Grading boundary not found\",\n });\n }\n }\n\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n gradingBoundary: gradingBoundaryId ? {\n connect: { id: gradingBoundaryId },\n } : {\n disconnect: true,\n },\n },\n include: {\n attachments: true,\n section: true,\n teacher: true,\n eventAttached: true,\n gradingBoundary: true,\n },\n });\n\n return updatedAssignment;\n }),\n detachGradingBoundary: protectedTeacherProcedure\n .input(z.object({\n classId: z.string(),\n assignmentId: z.string(),\n }))\n .mutation(async ({ ctx, input }) => {\n const { assignmentId } = input;\n\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n const updatedAssignment = await prisma.assignment.update({\n where: { id: assignmentId },\n data: {\n gradingBoundary: {\n disconnect: true,\n },\n },\n include: {\n attachments: true,\n section: true,\n teacher: true,\n eventAttached: true,\n gradingBoundary: true,\n },\n });\n\n return updatedAssignment;\n }),\n\n // New direct upload endpoints\n getAssignmentUploadUrls: protectedTeacherProcedure\n .input(getAssignmentUploadUrlsSchema)\n .mutation(async ({ ctx, input }) => {\n const { assignmentId, classId, files } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in to upload files\",\n });\n }\n\n // Verify user is a teacher of the class\n const classData = await prisma.class.findFirst({\n where: {\n id: classId,\n teachers: {\n some: {\n id: ctx.user.id,\n },\n },\n },\n });\n\n if (!classData) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Class not found or you are not a teacher\",\n });\n }\n\n // Verify assignment exists and belongs to the class\n const assignment = await prisma.assignment.findFirst({\n where: {\n id: assignmentId,\n classId: classId,\n },\n });\n\n if (!assignment) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Assignment not found\",\n });\n }\n\n // Create direct upload files\n const directUploadFiles = await createDirectUploadFiles(\n files,\n ctx.user.id,\n undefined, // No specific directory\n assignmentId\n );\n\n return {\n success: true,\n uploadFiles: directUploadFiles,\n };\n }),\n\n getSubmissionUploadUrls: protectedClassMemberProcedure\n .input(getSubmissionUploadUrlsSchema)\n .mutation(async ({ ctx, input }) => {\n const { submissionId, classId, files } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in to upload files\",\n });\n }\n\n // Verify submission exists and user has access\n const submission = await prisma.submission.findFirst({\n where: {\n id: submissionId,\n assignment: {\n classId: classId,\n },\n },\n include: {\n assignment: {\n include: {\n class: {\n include: {\n students: true,\n teachers: true,\n },\n },\n },\n },\n },\n });\n\n if (!submission) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Submission not found\",\n });\n }\n\n // Check if user is the student who owns the submission or a teacher of the class\n const isStudent = submission.studentId === ctx.user.id;\n const isTeacher = submission.assignment.class.teachers.some(teacher => teacher.id === ctx.user?.id);\n\n if (!isStudent && !isTeacher) {\n throw new TRPCError({\n code: \"FORBIDDEN\",\n message: \"You don't have permission to upload files to this submission\",\n });\n }\n\n // Create direct upload files\n const directUploadFiles = await createDirectUploadFiles(\n files,\n ctx.user.id,\n undefined, // No specific directory\n undefined, // No assignment ID\n submissionId\n );\n\n return {\n success: true,\n uploadFiles: directUploadFiles,\n };\n }),\n\n confirmAssignmentUpload: protectedTeacherProcedure\n .input(confirmAssignmentUploadSchema)\n .mutation(async ({ ctx, input }) => {\n const { fileId, uploadSuccess, errorMessage } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in\",\n });\n }\n\n // Verify file belongs to user and is an assignment file\n const file = await prisma.file.findFirst({\n where: {\n id: fileId,\n userId: ctx.user.id,\n assignment: {\n isNot: null,\n },\n },\n });\n\n if (!file) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"File not found or you don't have permission\",\n });\n }\n\n await confirmDirectUpload(fileId, uploadSuccess, errorMessage);\n\n return {\n success: true,\n message: uploadSuccess ? \"Upload confirmed successfully\" : \"Upload failed\",\n };\n }),\n\n confirmSubmissionUpload: protectedClassMemberProcedure\n .input(confirmSubmissionUploadSchema)\n .mutation(async ({ ctx, input }) => {\n const { fileId, uploadSuccess, errorMessage } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in\",\n });\n }\n\n // Verify file belongs to user and is a submission file\n const file = await prisma.file.findFirst({\n where: {\n id: fileId,\n userId: ctx.user.id,\n submission: {\n isNot: null,\n },\n },\n });\n\n if (!file) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"File not found or you don't have permission\",\n });\n }\n\n await confirmDirectUpload(fileId, uploadSuccess, errorMessage);\n\n return {\n success: true,\n message: uploadSuccess ? \"Upload confirmed successfully\" : \"Upload failed\",\n };\n }),\n\n getAnnotationUploadUrls: protectedTeacherProcedure\n .input(getAnnotationUploadUrlsSchema)\n .mutation(async ({ ctx, input }) => {\n const { submissionId, classId, files } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in to upload files\",\n });\n }\n\n // Verify submission exists and user is a teacher of the class\n const submission = await prisma.submission.findFirst({\n where: {\n id: submissionId,\n assignment: {\n classId: classId,\n class: {\n teachers: {\n some: {\n id: ctx.user.id,\n },\n },\n },\n },\n },\n });\n\n if (!submission) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"Submission not found or you are not a teacher of this class\",\n });\n }\n\n // Create direct upload files for annotations\n // Note: We pass submissionId as the 5th parameter, but these are annotations not submission files\n // We need to store them separately, so we'll use a different approach\n const directUploadFiles = await createDirectUploadFiles(\n files,\n ctx.user.id,\n undefined, // No specific directory\n undefined, // No assignment ID\n undefined // Don't link to submission yet (will be linked in confirmAnnotationUpload)\n );\n\n // Store the submissionId in the file record so we can link it to annotations later\n await Promise.all(\n directUploadFiles.map(file =>\n prisma.file.update({\n where: { id: file.id },\n data: {\n annotationId: submissionId, // Store as annotation\n }\n })\n )\n );\n\n return {\n success: true,\n uploadFiles: directUploadFiles,\n };\n }),\n\n confirmAnnotationUpload: protectedTeacherProcedure\n .input(confirmAnnotationUploadSchema)\n .mutation(async ({ ctx, input }) => {\n const { fileId, uploadSuccess, errorMessage } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in\",\n });\n }\n\n // Verify file belongs to user and is an annotation file\n const file = await prisma.file.findFirst({\n where: {\n id: fileId,\n userId: ctx.user.id,\n annotationId: {\n not: null,\n },\n },\n });\n\n if (!file) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"File not found or you don't have permission\",\n });\n }\n\n await confirmDirectUpload(fileId, uploadSuccess, errorMessage);\n\n return {\n success: true,\n message: uploadSuccess ? \"Annotation upload confirmed successfully\" : \"Annotation upload failed\",\n };\n }),\n\n updateUploadProgress: protectedProcedure\n .input(updateUploadProgressSchema)\n .mutation(async ({ ctx, input }) => {\n const { fileId, progress } = input;\n\n if (!ctx.user) {\n throw new TRPCError({\n code: \"UNAUTHORIZED\",\n message: \"You must be logged in\",\n });\n }\n\n // Verify file belongs to user\n const file = await prisma.file.findFirst({\n where: {\n id: fileId,\n userId: ctx.user.id,\n },\n });\n\n if (!file) {\n throw new TRPCError({\n code: \"NOT_FOUND\",\n message: \"File not found or you don't have permission\",\n });\n }\n\n await updateUploadProgress(fileId, progress);\n\n return {\n success: true,\n progress,\n };\n }),\n});\n\n"],"names":[],"mappings":"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","debug_id":"ab676c82-5988-55c9-a90b-a62a2cee20ba"}
|