@studious-lms/server 1.4.6 → 1.4.9

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.
Files changed (177) hide show
  1. package/.github/workflows/npm.yml +28 -0
  2. package/dist/models/access.d.ts +112 -0
  3. package/dist/models/access.d.ts.map +1 -0
  4. package/dist/models/access.js +49 -0
  5. package/dist/models/access.js.map +1 -0
  6. package/dist/models/announcement.d.ts +17 -2
  7. package/dist/models/announcement.d.ts.map +1 -1
  8. package/dist/models/announcement.js +21 -4
  9. package/dist/models/announcement.js.map +1 -1
  10. package/dist/models/assignment.d.ts +69 -37
  11. package/dist/models/assignment.d.ts.map +1 -1
  12. package/dist/models/assignment.js +124 -15
  13. package/dist/models/assignment.js.map +1 -1
  14. package/dist/models/attendance.d.ts +1 -1
  15. package/dist/models/attendance.d.ts.map +1 -1
  16. package/dist/models/attendance.js +6 -5
  17. package/dist/models/attendance.js.map +1 -1
  18. package/dist/models/auth.d.ts +5 -5
  19. package/dist/models/auth.d.ts.map +1 -1
  20. package/dist/models/auth.js +7 -11
  21. package/dist/models/auth.js.map +1 -1
  22. package/dist/models/class.d.ts +26 -26
  23. package/dist/models/class.d.ts.map +1 -1
  24. package/dist/models/class.js +7 -11
  25. package/dist/models/class.js.map +1 -1
  26. package/dist/models/comment.d.ts +134 -70
  27. package/dist/models/comment.d.ts.map +1 -1
  28. package/dist/models/comment.js +30 -42
  29. package/dist/models/comment.js.map +1 -1
  30. package/dist/models/conversation.d.ts +7 -7
  31. package/dist/models/event.d.ts +52 -3
  32. package/dist/models/event.d.ts.map +1 -1
  33. package/dist/models/event.js +56 -6
  34. package/dist/models/event.js.map +1 -1
  35. package/dist/models/file.d.ts +178 -103
  36. package/dist/models/file.d.ts.map +1 -1
  37. package/dist/models/file.js +54 -14
  38. package/dist/models/file.js.map +1 -1
  39. package/dist/models/folder.d.ts +22 -22
  40. package/dist/models/folder.d.ts.map +1 -1
  41. package/dist/models/folder.js +5 -4
  42. package/dist/models/folder.js.map +1 -1
  43. package/dist/models/labChat.d.ts +20 -20
  44. package/dist/models/labChat.d.ts.map +1 -1
  45. package/dist/models/labChat.js +8 -10
  46. package/dist/models/labChat.js.map +1 -1
  47. package/dist/models/marketing.d.ts +1 -1
  48. package/dist/models/message.d.ts +6 -6
  49. package/dist/models/newtonChat.d.ts +5 -5
  50. package/dist/models/school.d.ts +361 -0
  51. package/dist/models/school.d.ts.map +1 -0
  52. package/dist/models/school.js +314 -0
  53. package/dist/models/school.js.map +1 -0
  54. package/dist/models/section.d.ts +1 -1
  55. package/dist/models/section.d.ts.map +1 -1
  56. package/dist/models/section.js +5 -4
  57. package/dist/models/section.js.map +1 -1
  58. package/dist/models/user.d.ts +4 -4
  59. package/dist/models/worksheet.d.ts +163 -141
  60. package/dist/models/worksheet.d.ts.map +1 -1
  61. package/dist/models/worksheet.js +42 -17
  62. package/dist/models/worksheet.js.map +1 -1
  63. package/dist/pipelines/gradeWorksheet.d.ts +2 -2
  64. package/dist/pipelines/pdfToWorksheet.d.ts +1 -1
  65. package/dist/routers/_app.d.ts +1271 -327
  66. package/dist/routers/_app.d.ts.map +1 -1
  67. package/dist/routers/_app.js +4 -2
  68. package/dist/routers/_app.js.map +1 -1
  69. package/dist/routers/announcement.d.ts +5 -5
  70. package/dist/routers/announcement.d.ts.map +1 -1
  71. package/dist/routers/announcement.js +25 -5
  72. package/dist/routers/announcement.js.map +1 -1
  73. package/dist/routers/assignment.d.ts +79 -44
  74. package/dist/routers/assignment.d.ts.map +1 -1
  75. package/dist/routers/assignment.js +32 -12
  76. package/dist/routers/assignment.js.map +1 -1
  77. package/dist/routers/class.d.ts +40 -20
  78. package/dist/routers/class.d.ts.map +1 -1
  79. package/dist/routers/class.js +3 -2
  80. package/dist/routers/class.js.map +1 -1
  81. package/dist/routers/comment.d.ts +5 -5
  82. package/dist/routers/conversation.d.ts +6 -6
  83. package/dist/routers/event.d.ts +21 -2
  84. package/dist/routers/event.d.ts.map +1 -1
  85. package/dist/routers/file.d.ts +2 -2
  86. package/dist/routers/folder.d.ts +24 -24
  87. package/dist/routers/labChat.d.ts +7 -7
  88. package/dist/routers/school.d.ts +384 -0
  89. package/dist/routers/school.d.ts.map +1 -0
  90. package/dist/routers/school.js +79 -0
  91. package/dist/routers/school.js.map +1 -0
  92. package/dist/routers/search.d.ts +1 -1
  93. package/dist/routers/worksheet.d.ts +36 -20
  94. package/dist/routers/worksheet.d.ts.map +1 -1
  95. package/dist/routers/worksheet.js +10 -3
  96. package/dist/routers/worksheet.js.map +1 -1
  97. package/dist/services/announcement.d.ts.map +1 -1
  98. package/dist/services/announcement.js +10 -6
  99. package/dist/services/announcement.js.map +1 -1
  100. package/dist/services/assignment.d.ts +66 -36
  101. package/dist/services/assignment.d.ts.map +1 -1
  102. package/dist/services/assignment.js +37 -3
  103. package/dist/services/assignment.js.map +1 -1
  104. package/dist/services/class.d.ts +39 -19
  105. package/dist/services/class.d.ts.map +1 -1
  106. package/dist/services/class.js +52 -15
  107. package/dist/services/class.js.map +1 -1
  108. package/dist/services/comment.d.ts +5 -5
  109. package/dist/services/comment.d.ts.map +1 -1
  110. package/dist/services/comment.js +8 -3
  111. package/dist/services/comment.js.map +1 -1
  112. package/dist/services/conversation.d.ts +6 -6
  113. package/dist/services/event.d.ts +21 -2
  114. package/dist/services/event.d.ts.map +1 -1
  115. package/dist/services/event.js +11 -7
  116. package/dist/services/event.js.map +1 -1
  117. package/dist/services/file.d.ts +2 -2
  118. package/dist/services/file.d.ts.map +1 -1
  119. package/dist/services/file.js +17 -8
  120. package/dist/services/file.js.map +1 -1
  121. package/dist/services/folder.d.ts +24 -24
  122. package/dist/services/labChat.d.ts +7 -7
  123. package/dist/services/school.d.ts +299 -0
  124. package/dist/services/school.d.ts.map +1 -0
  125. package/dist/services/school.js +225 -0
  126. package/dist/services/school.js.map +1 -0
  127. package/dist/services/worksheet.d.ts +31 -20
  128. package/dist/services/worksheet.d.ts.map +1 -1
  129. package/dist/services/worksheet.js +37 -3
  130. package/dist/services/worksheet.js.map +1 -1
  131. package/package.json +1 -1
  132. package/prisma/migrations/20260504071500_school_memberships/migration.sql +81 -0
  133. package/prisma/schema.prisma +66 -2
  134. package/src/models/access.ts +48 -0
  135. package/src/models/announcement.ts +19 -2
  136. package/src/models/assignment.ts +149 -13
  137. package/src/models/attendance.ts +4 -3
  138. package/src/models/auth.ts +8 -9
  139. package/src/models/class.ts +8 -9
  140. package/src/models/comment.ts +29 -40
  141. package/src/models/event.ts +54 -4
  142. package/src/models/file.ts +53 -12
  143. package/src/models/folder.ts +3 -2
  144. package/src/models/labChat.ts +9 -8
  145. package/src/models/school.ts +361 -0
  146. package/src/models/section.ts +3 -2
  147. package/src/models/worksheet.ts +61 -12
  148. package/src/routers/_app.ts +2 -0
  149. package/src/routers/announcement.ts +30 -4
  150. package/src/routers/assignment.ts +46 -9
  151. package/src/routers/class.ts +1 -0
  152. package/src/routers/school.ts +122 -0
  153. package/src/routers/worksheet.ts +18 -0
  154. package/src/services/announcement.ts +12 -4
  155. package/src/services/assignment.ts +47 -1
  156. package/src/services/class.ts +61 -14
  157. package/src/services/comment.ts +10 -1
  158. package/src/services/event.ts +23 -6
  159. package/src/services/file.ts +20 -6
  160. package/src/services/school.ts +308 -0
  161. package/src/services/worksheet.ts +46 -0
  162. package/dist/lib/notificationHandler.d.ts +0 -25
  163. package/dist/lib/notificationHandler.d.ts.map +0 -1
  164. package/dist/lib/notificationHandler.js +0 -32
  165. package/dist/lib/notificationHandler.js.map +0 -1
  166. package/dist/server/pipelines/aiLabChat.d.ts +0 -21
  167. package/dist/server/pipelines/aiLabChat.d.ts.map +0 -1
  168. package/dist/server/pipelines/aiLabChat.js +0 -456
  169. package/dist/server/pipelines/aiLabChat.js.map +0 -1
  170. package/dist/server/pipelines/aiNewtonChat.d.ts +0 -30
  171. package/dist/server/pipelines/aiNewtonChat.d.ts.map +0 -1
  172. package/dist/server/pipelines/aiNewtonChat.js +0 -285
  173. package/dist/server/pipelines/aiNewtonChat.js.map +0 -1
  174. package/dist/server/pipelines/gradeWorksheet.d.ts +0 -30
  175. package/dist/server/pipelines/gradeWorksheet.d.ts.map +0 -1
  176. package/dist/server/pipelines/gradeWorksheet.js +0 -248
  177. package/dist/server/pipelines/gradeWorksheet.js.map +0 -1
@@ -157,6 +157,41 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
157
157
  };
158
158
  meta: object;
159
159
  }>;
160
+ duplicateAssignment: import("@trpc/server").TRPCMutationProcedure<{
161
+ input: {
162
+ [x: string]: unknown;
163
+ classId: string;
164
+ assignmentId: string;
165
+ title: string;
166
+ };
167
+ output: {
168
+ type: import(".prisma/client").$Enums.AssignmentType;
169
+ id: string;
170
+ createdAt: Date | null;
171
+ modifiedAt: Date | null;
172
+ classId: string;
173
+ title: string;
174
+ instructions: string;
175
+ dueDate: Date;
176
+ teacherId: string;
177
+ acceptFiles: boolean;
178
+ acceptExtendedResponse: boolean;
179
+ acceptWorksheet: boolean;
180
+ gradeWithAI: boolean;
181
+ aiPolicyLevel: number;
182
+ sectionId: string | null;
183
+ graded: boolean;
184
+ maxGrade: number | null;
185
+ weight: number;
186
+ inProgress: boolean;
187
+ template: boolean;
188
+ eventId: string | null;
189
+ markSchemeId: string | null;
190
+ order: number | null;
191
+ gradingBoundaryId: string | null;
192
+ };
193
+ meta: object;
194
+ }>;
160
195
  update: import("@trpc/server").TRPCMutationProcedure<{
161
196
  input: {
162
197
  [x: string]: unknown;
@@ -189,12 +224,7 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
189
224
  output: {
190
225
  type: import(".prisma/client").$Enums.AssignmentType;
191
226
  id: string;
192
- submissions: {
193
- student: {
194
- id: string;
195
- username: string;
196
- };
197
- }[];
227
+ createdAt: Date | null;
198
228
  class: {
199
229
  name: string;
200
230
  id: string;
@@ -211,7 +241,12 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
211
241
  classId: string;
212
242
  order: number | null;
213
243
  } | null;
214
- createdAt: Date | null;
244
+ submissions: {
245
+ student: {
246
+ id: string;
247
+ username: string;
248
+ };
249
+ }[];
215
250
  title: string;
216
251
  instructions: string;
217
252
  dueDate: Date;
@@ -241,8 +276,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
241
276
  type: string;
242
277
  name: string;
243
278
  id: string;
244
- size: number | null;
245
279
  userId: string | null;
280
+ size: number | null;
246
281
  uploadedAt: Date | null;
247
282
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
248
283
  uploadUrl: string | null;
@@ -289,12 +324,6 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
289
324
  name: string;
290
325
  id: string;
291
326
  }[];
292
- submissions: {
293
- student: {
294
- id: string;
295
- username: string;
296
- };
297
- }[];
298
327
  class: {
299
328
  name: string;
300
329
  id: string;
@@ -303,6 +332,12 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
303
332
  name: string;
304
333
  id: string;
305
334
  } | null;
335
+ submissions: {
336
+ student: {
337
+ id: string;
338
+ username: string;
339
+ };
340
+ }[];
306
341
  markScheme: {
307
342
  id: string;
308
343
  structured: string;
@@ -425,8 +460,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
425
460
  type: string;
426
461
  name: string;
427
462
  id: string;
428
- size: number | null;
429
463
  userId: string | null;
464
+ size: number | null;
430
465
  uploadedAt: Date | null;
431
466
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
432
467
  uploadUrl: string | null;
@@ -453,8 +488,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
453
488
  type: string;
454
489
  name: string;
455
490
  id: string;
456
- size: number | null;
457
491
  userId: string | null;
492
+ size: number | null;
458
493
  uploadedAt: Date | null;
459
494
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
460
495
  uploadUrl: string | null;
@@ -481,8 +516,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
481
516
  username: string;
482
517
  };
483
518
  id: string;
484
- assignmentId: string;
485
519
  createdAt: Date;
520
+ assignmentId: string;
486
521
  modifiedAt: Date;
487
522
  studentId: string;
488
523
  extendedResponse: string | null;
@@ -559,8 +594,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
559
594
  type: string;
560
595
  name: string;
561
596
  id: string;
562
- size: number | null;
563
597
  userId: string | null;
598
+ size: number | null;
564
599
  uploadedAt: Date | null;
565
600
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
566
601
  uploadUrl: string | null;
@@ -587,8 +622,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
587
622
  type: string;
588
623
  name: string;
589
624
  id: string;
590
- size: number | null;
591
625
  userId: string | null;
626
+ size: number | null;
592
627
  uploadedAt: Date | null;
593
628
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
594
629
  uploadUrl: string | null;
@@ -615,10 +650,10 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
615
650
  username: string;
616
651
  profile: {
617
652
  id: string;
618
- userId: string;
619
653
  createdAt: Date;
620
- location: string | null;
621
654
  updatedAt: Date;
655
+ userId: string;
656
+ location: string | null;
622
657
  displayName: string | null;
623
658
  bio: string | null;
624
659
  website: string | null;
@@ -627,8 +662,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
627
662
  } | null;
628
663
  };
629
664
  id: string;
630
- assignmentId: string;
631
665
  createdAt: Date;
666
+ assignmentId: string;
632
667
  modifiedAt: Date;
633
668
  studentId: string;
634
669
  extendedResponse: string | null;
@@ -710,8 +745,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
710
745
  type: string;
711
746
  name: string;
712
747
  id: string;
713
- size: number | null;
714
748
  userId: string | null;
749
+ size: number | null;
715
750
  uploadedAt: Date | null;
716
751
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
717
752
  uploadUrl: string | null;
@@ -739,8 +774,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
739
774
  };
740
775
  } & {
741
776
  id: string;
742
- assignmentId: string;
743
777
  createdAt: Date;
778
+ assignmentId: string;
744
779
  modifiedAt: Date;
745
780
  studentId: string;
746
781
  extendedResponse: string | null;
@@ -814,8 +849,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
814
849
  type: string;
815
850
  name: string;
816
851
  id: string;
817
- size: number | null;
818
852
  userId: string | null;
853
+ size: number | null;
819
854
  uploadedAt: Date | null;
820
855
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
821
856
  uploadUrl: string | null;
@@ -842,8 +877,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
842
877
  type: string;
843
878
  name: string;
844
879
  id: string;
845
- size: number | null;
846
880
  userId: string | null;
881
+ size: number | null;
847
882
  uploadedAt: Date | null;
848
883
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
849
884
  uploadUrl: string | null;
@@ -875,8 +910,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
875
910
  } | null;
876
911
  };
877
912
  id: string;
878
- assignmentId: string;
879
913
  createdAt: Date;
914
+ assignmentId: string;
880
915
  modifiedAt: Date;
881
916
  studentId: string;
882
917
  extendedResponse: string | null;
@@ -922,10 +957,10 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
922
957
  } & {
923
958
  status: import(".prisma/client").$Enums.GenerationStatus | null;
924
959
  id: string;
960
+ createdAt: Date;
925
961
  assignmentId: string | null;
926
962
  submissionId: string | null;
927
963
  announcementId: string | null;
928
- createdAt: Date;
929
964
  modifiedAt: Date | null;
930
965
  content: string;
931
966
  authorId: string;
@@ -935,10 +970,10 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
935
970
  } & {
936
971
  status: import(".prisma/client").$Enums.GenerationStatus | null;
937
972
  id: string;
973
+ createdAt: Date;
938
974
  assignmentId: string | null;
939
975
  submissionId: string | null;
940
976
  announcementId: string | null;
941
- createdAt: Date;
942
977
  modifiedAt: Date | null;
943
978
  content: string;
944
979
  authorId: string;
@@ -980,10 +1015,10 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
980
1015
  } & {
981
1016
  status: import(".prisma/client").$Enums.GenerationStatus | null;
982
1017
  id: string;
1018
+ createdAt: Date;
983
1019
  assignmentId: string | null;
984
1020
  submissionId: string | null;
985
1021
  announcementId: string | null;
986
- createdAt: Date;
987
1022
  modifiedAt: Date | null;
988
1023
  content: string;
989
1024
  authorId: string;
@@ -993,10 +1028,10 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
993
1028
  } & {
994
1029
  status: import(".prisma/client").$Enums.GenerationStatus | null;
995
1030
  id: string;
1031
+ createdAt: Date;
996
1032
  assignmentId: string | null;
997
1033
  submissionId: string | null;
998
1034
  announcementId: string | null;
999
- createdAt: Date;
1000
1035
  modifiedAt: Date | null;
1001
1036
  content: string;
1002
1037
  authorId: string;
@@ -1037,10 +1072,10 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1037
1072
  } & {
1038
1073
  status: import(".prisma/client").$Enums.GenerationStatus | null;
1039
1074
  id: string;
1075
+ createdAt: Date;
1040
1076
  assignmentId: string | null;
1041
1077
  submissionId: string | null;
1042
1078
  announcementId: string | null;
1043
- createdAt: Date;
1044
1079
  modifiedAt: Date | null;
1045
1080
  content: string;
1046
1081
  authorId: string;
@@ -1050,10 +1085,10 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1050
1085
  } & {
1051
1086
  status: import(".prisma/client").$Enums.GenerationStatus | null;
1052
1087
  id: string;
1088
+ createdAt: Date;
1053
1089
  assignmentId: string | null;
1054
1090
  submissionId: string | null;
1055
1091
  announcementId: string | null;
1056
- createdAt: Date;
1057
1092
  modifiedAt: Date | null;
1058
1093
  content: string;
1059
1094
  authorId: string;
@@ -1096,10 +1131,10 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1096
1131
  } & {
1097
1132
  status: import(".prisma/client").$Enums.GenerationStatus | null;
1098
1133
  id: string;
1134
+ createdAt: Date;
1099
1135
  assignmentId: string | null;
1100
1136
  submissionId: string | null;
1101
1137
  announcementId: string | null;
1102
- createdAt: Date;
1103
1138
  modifiedAt: Date | null;
1104
1139
  content: string;
1105
1140
  authorId: string;
@@ -1109,10 +1144,10 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1109
1144
  } & {
1110
1145
  status: import(".prisma/client").$Enums.GenerationStatus | null;
1111
1146
  id: string;
1147
+ createdAt: Date;
1112
1148
  assignmentId: string | null;
1113
1149
  submissionId: string | null;
1114
1150
  announcementId: string | null;
1115
- createdAt: Date;
1116
1151
  modifiedAt: Date | null;
1117
1152
  content: string;
1118
1153
  authorId: string;
@@ -1196,8 +1231,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1196
1231
  type: string;
1197
1232
  name: string;
1198
1233
  id: string;
1199
- size: number | null;
1200
1234
  userId: string | null;
1235
+ size: number | null;
1201
1236
  uploadedAt: Date | null;
1202
1237
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1203
1238
  uploadUrl: string | null;
@@ -1224,8 +1259,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1224
1259
  type: string;
1225
1260
  name: string;
1226
1261
  id: string;
1227
- size: number | null;
1228
1262
  userId: string | null;
1263
+ size: number | null;
1229
1264
  uploadedAt: Date | null;
1230
1265
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1231
1266
  uploadUrl: string | null;
@@ -1253,8 +1288,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1253
1288
  type: string;
1254
1289
  name: string;
1255
1290
  id: string;
1256
- size: number | null;
1257
1291
  userId: string | null;
1292
+ size: number | null;
1258
1293
  uploadedAt: Date | null;
1259
1294
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1260
1295
  uploadUrl: string | null;
@@ -1281,8 +1316,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1281
1316
  type: string;
1282
1317
  name: string;
1283
1318
  id: string;
1284
- size: number | null;
1285
1319
  userId: string | null;
1320
+ size: number | null;
1286
1321
  uploadedAt: Date | null;
1287
1322
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1288
1323
  uploadUrl: string | null;
@@ -1315,8 +1350,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1315
1350
  };
1316
1351
  } & {
1317
1352
  id: string;
1318
- assignmentId: string;
1319
1353
  createdAt: Date;
1354
+ assignmentId: string;
1320
1355
  modifiedAt: Date;
1321
1356
  studentId: string;
1322
1357
  extendedResponse: string | null;
@@ -1516,8 +1551,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1516
1551
  type: string;
1517
1552
  name: string;
1518
1553
  id: string;
1519
- size: number | null;
1520
1554
  userId: string | null;
1555
+ size: number | null;
1521
1556
  uploadedAt: Date | null;
1522
1557
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1523
1558
  uploadUrl: string | null;
@@ -1611,8 +1646,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1611
1646
  type: string;
1612
1647
  name: string;
1613
1648
  id: string;
1614
- size: number | null;
1615
1649
  userId: string | null;
1650
+ size: number | null;
1616
1651
  uploadedAt: Date | null;
1617
1652
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1618
1653
  uploadUrl: string | null;
@@ -1707,8 +1742,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1707
1742
  type: string;
1708
1743
  name: string;
1709
1744
  id: string;
1710
- size: number | null;
1711
1745
  userId: string | null;
1746
+ size: number | null;
1712
1747
  uploadedAt: Date | null;
1713
1748
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1714
1749
  uploadUrl: string | null;
@@ -1802,8 +1837,8 @@ export declare const assignmentRouter: import("@trpc/server").TRPCBuiltRouter<{
1802
1837
  type: string;
1803
1838
  name: string;
1804
1839
  id: string;
1805
- size: number | null;
1806
1840
  userId: string | null;
1841
+ size: number | null;
1807
1842
  uploadedAt: Date | null;
1808
1843
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1809
1844
  uploadUrl: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"assignment.d.ts","sourceRoot":"/","sources":["routers/assignment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAA2B,KAAK,gBAAgB,EAAgE,MAAM,sBAAsB,CAAC;AAsOpJ,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2oB3B,CAAC"}
1
+ {"version":3,"file":"assignment.d.ts","sourceRoot":"/","sources":["routers/assignment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAA2B,KAAK,gBAAgB,EAAgE,MAAM,sBAAsB,CAAC;AA2OpJ,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2qB3B,CAAC"}
@@ -1,11 +1,12 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1e544bfd-5929-552d-a49c-f0ca8b5232fe")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="88c9a5e9-f0c5-5e0e-bf58-8765cdd9a0a9")}catch(e){}}();
3
3
  import { z } from "zod";
4
4
  import { createTRPCRouter, protectedProcedure, protectedClassMemberProcedure, protectedTeacherProcedure } from "../trpc.js";
5
5
  import { TRPCError } from "@trpc/server";
6
6
  import { prisma } from "../lib/prisma.js";
7
7
  import { createDirectUploadFiles, confirmDirectUpload, updateUploadProgress } from "../lib/fileUpload.js";
8
- import { assignmentExists, getDueToday, getAssignment, getSubmission, getSubmissionById, getSubmissions, createAssignmentRecord, updateAssignmentRecord, deleteAssignmentRecord, updateSubmissionRecord, updateSubmissionAsTeacherRecord, attachAssignmentToEventRecord, detachAssignmentFromEventRecord, getAvailableEventsForAssignment, attachMarkSchemeRecord, detachMarkSchemeRecord, attachGradingBoundaryRecord, detachGradingBoundaryRecord, reorderAssignmentRecord, moveAssignmentRecord, } from "../services/assignment.js";
8
+ import { classMemberOrSchoolAdminWhere, classTeacherOrSchoolAdminWhere, } from "../models/access.js";
9
+ import { assignmentExists, getDueToday, getAssignment, getSubmission, getSubmissionById, getSubmissions, createAssignmentRecord, duplicateAssignmentRecord, updateAssignmentRecord, deleteAssignmentRecord, updateSubmissionRecord, updateSubmissionAsTeacherRecord, attachAssignmentToEventRecord, detachAssignmentFromEventRecord, getAvailableEventsForAssignment, attachMarkSchemeRecord, detachMarkSchemeRecord, attachGradingBoundaryRecord, detachGradingBoundaryRecord, reorderAssignmentRecord, moveAssignmentRecord, } from "../services/assignment.js";
9
10
  // DEPRECATED: This schema is no longer used - files are uploaded directly to GCS
10
11
  // Use directFileSchema instead
11
12
  // New schema for direct file uploads (no base64 data)
@@ -219,6 +220,13 @@ export const assignmentRouter = createTRPCRouter({
219
220
  create: protectedTeacherProcedure
220
221
  .input(createAssignmentSchema)
221
222
  .mutation(({ ctx, input }) => createAssignmentRecord(ctx.user.id, input)),
223
+ duplicateAssignment: protectedTeacherProcedure
224
+ .input(z.object({
225
+ classId: z.string(),
226
+ title: z.string(),
227
+ assignmentId: z.string(),
228
+ }))
229
+ .mutation(({ ctx, input }) => duplicateAssignmentRecord(input.assignmentId, input.classId, input.title, ctx.user.id)),
222
230
  update: protectedTeacherProcedure
223
231
  .input(updateAssignmentSchema)
224
232
  .mutation(({ ctx, input }) => updateAssignmentRecord(ctx.user.id, input)),
@@ -322,16 +330,11 @@ export const assignmentRouter = createTRPCRouter({
322
330
  assignmentId: input.assignmentId,
323
331
  assignment: {
324
332
  classId: input.classId,
325
- class: {
326
- OR: [
327
- { teachers: { some: { id: ctx.user.id } } },
328
- { students: { some: { id: ctx.user.id } } },
329
- ],
330
- },
333
+ class: classMemberOrSchoolAdminWhere(ctx.user.id),
331
334
  },
332
335
  OR: [
333
336
  { studentId: ctx.user.id },
334
- { assignment: { class: { teachers: { some: { id: ctx.user.id } } } } },
337
+ { assignment: { class: classTeacherOrSchoolAdminWhere(ctx.user.id) } },
335
338
  ],
336
339
  },
337
340
  select: { id: true },
@@ -362,7 +365,7 @@ export const assignmentRouter = createTRPCRouter({
362
365
  assignment: { classId: input.classId },
363
366
  OR: [
364
367
  { studentId: ctx.user.id },
365
- { assignment: { class: { teachers: { some: { id: ctx.user.id } } } } },
368
+ { assignment: { class: classTeacherOrSchoolAdminWhere(ctx.user.id) } },
366
369
  ],
367
370
  },
368
371
  select: { id: true },
@@ -516,6 +519,21 @@ export const assignmentRouter = createTRPCRouter({
516
519
  include: {
517
520
  students: true,
518
521
  teachers: true,
522
+ school: {
523
+ include: {
524
+ users: {
525
+ where: { role: "ADMIN" },
526
+ select: { id: true },
527
+ },
528
+ memberships: {
529
+ where: {
530
+ role: "ADMIN",
531
+ status: "ACTIVE",
532
+ },
533
+ select: { userId: true },
534
+ },
535
+ },
536
+ },
519
537
  },
520
538
  },
521
539
  },
@@ -531,7 +549,9 @@ export const assignmentRouter = createTRPCRouter({
531
549
  // Check if user is the student who owns the submission or a teacher of the class
532
550
  const isStudent = submission.studentId === ctx.user.id;
533
551
  const isTeacher = submission.assignment.class.teachers.some(teacher => teacher.id === ctx.user?.id);
534
- if (!isStudent && !isTeacher) {
552
+ const isSchoolAdmin = Boolean(submission.assignment.class.school?.memberships.some(admin => admin.userId === ctx.user?.id) ||
553
+ submission.assignment.class.school?.users.some(admin => admin.id === ctx.user?.id));
554
+ if (!isStudent && !isTeacher && !isSchoolAdmin) {
535
555
  throw new TRPCError({
536
556
  code: "FORBIDDEN",
537
557
  message: "You don't have permission to upload files to this submission",
@@ -724,4 +744,4 @@ export const assignmentRouter = createTRPCRouter({
724
744
  }),
725
745
  });
726
746
  //# sourceMappingURL=assignment.js.map
727
- //# debugId=1e544bfd-5929-552d-a49c-f0ca8b5232fe
747
+ //# debugId=88c9a5e9-f0c5-5e0e-bf58-8765cdd9a0a9