@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
@@ -0,0 +1,28 @@
1
+ name: Publish Package
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ permissions:
9
+ id-token: write # Required for OIDC / npm provenance
10
+ contents: read
11
+
12
+ jobs:
13
+ publish:
14
+ runs-on: ubuntu-latest
15
+ env:
16
+ SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
17
+ steps:
18
+ - uses: actions/checkout@v6
19
+
20
+ - uses: actions/setup-node@v6
21
+ with:
22
+ node-version: '24'
23
+ registry-url: 'https://registry.npmjs.org'
24
+ package-manager-cache: false # never use caching in release builds
25
+
26
+ - run: npm ci
27
+ - run: npm run build --if-present
28
+ - run: npm publish --access public
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Shared class access filters.
3
+ */
4
+ export declare const schoolAdminForClassWhere: (userId: string) => {
5
+ OR: ({
6
+ school: {
7
+ is: {
8
+ memberships: {
9
+ some: {
10
+ userId: string;
11
+ role: "ADMIN";
12
+ status: "ACTIVE";
13
+ };
14
+ };
15
+ users?: undefined;
16
+ };
17
+ };
18
+ } | {
19
+ school: {
20
+ is: {
21
+ users: {
22
+ some: {
23
+ id: string;
24
+ role: "ADMIN";
25
+ };
26
+ };
27
+ memberships?: undefined;
28
+ };
29
+ };
30
+ })[];
31
+ };
32
+ export declare const classTeacherOrSchoolAdminWhere: (userId: string) => {
33
+ OR: ({
34
+ OR: ({
35
+ school: {
36
+ is: {
37
+ memberships: {
38
+ some: {
39
+ userId: string;
40
+ role: "ADMIN";
41
+ status: "ACTIVE";
42
+ };
43
+ };
44
+ users?: undefined;
45
+ };
46
+ };
47
+ } | {
48
+ school: {
49
+ is: {
50
+ users: {
51
+ some: {
52
+ id: string;
53
+ role: "ADMIN";
54
+ };
55
+ };
56
+ memberships?: undefined;
57
+ };
58
+ };
59
+ })[];
60
+ } | {
61
+ teachers: {
62
+ some: {
63
+ id: string;
64
+ };
65
+ };
66
+ })[];
67
+ };
68
+ export declare const classMemberOrSchoolAdminWhere: (userId: string) => {
69
+ OR: ({
70
+ OR: ({
71
+ school: {
72
+ is: {
73
+ memberships: {
74
+ some: {
75
+ userId: string;
76
+ role: "ADMIN";
77
+ status: "ACTIVE";
78
+ };
79
+ };
80
+ users?: undefined;
81
+ };
82
+ };
83
+ } | {
84
+ school: {
85
+ is: {
86
+ users: {
87
+ some: {
88
+ id: string;
89
+ role: "ADMIN";
90
+ };
91
+ };
92
+ memberships?: undefined;
93
+ };
94
+ };
95
+ })[];
96
+ } | {
97
+ teachers: {
98
+ some: {
99
+ id: string;
100
+ };
101
+ };
102
+ students?: undefined;
103
+ } | {
104
+ students: {
105
+ some: {
106
+ id: string;
107
+ };
108
+ };
109
+ teachers?: undefined;
110
+ })[];
111
+ };
112
+ //# sourceMappingURL=access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"/","sources":["models/access.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BrD,CAAC;AAEH,eAAO,MAAM,8BAA8B,GAAI,QAAQ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAK3D,CAAC;AAEH,eAAO,MAAM,6BAA6B,GAAI,QAAQ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM1D,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Shared class access filters.
3
+ */
4
+
5
+ !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]="7b5148ef-61c8-512a-bcea-eacfc9066ef7")}catch(e){}}();
6
+ export const schoolAdminForClassWhere = (userId) => ({
7
+ OR: [
8
+ {
9
+ school: {
10
+ is: {
11
+ memberships: {
12
+ some: {
13
+ userId,
14
+ role: "ADMIN",
15
+ status: "ACTIVE",
16
+ },
17
+ },
18
+ },
19
+ },
20
+ },
21
+ {
22
+ school: {
23
+ is: {
24
+ users: {
25
+ some: {
26
+ id: userId,
27
+ role: "ADMIN",
28
+ },
29
+ },
30
+ },
31
+ },
32
+ },
33
+ ],
34
+ });
35
+ export const classTeacherOrSchoolAdminWhere = (userId) => ({
36
+ OR: [
37
+ { teachers: { some: { id: userId } } },
38
+ schoolAdminForClassWhere(userId),
39
+ ],
40
+ });
41
+ export const classMemberOrSchoolAdminWhere = (userId) => ({
42
+ OR: [
43
+ { teachers: { some: { id: userId } } },
44
+ { students: { some: { id: userId } } },
45
+ schoolAdminForClassWhere(userId),
46
+ ],
47
+ });
48
+ //# sourceMappingURL=access.js.map
49
+ //# debugId=7b5148ef-61c8-512a-bcea-eacfc9066ef7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.js","sources":["models/access.ts"],"sourceRoot":"/","sourcesContent":["/**\n * Shared class access filters.\n */\n\nexport const schoolAdminForClassWhere = (userId: string) => ({\n OR: [\n {\n school: {\n is: {\n memberships: {\n some: {\n userId,\n role: \"ADMIN\" as const,\n status: \"ACTIVE\" as const,\n },\n },\n },\n },\n },\n {\n school: {\n is: {\n users: {\n some: {\n id: userId,\n role: \"ADMIN\" as const,\n },\n },\n },\n },\n },\n ],\n});\n\nexport const classTeacherOrSchoolAdminWhere = (userId: string) => ({\n OR: [\n { teachers: { some: { id: userId } } },\n schoolAdminForClassWhere(userId),\n ],\n});\n\nexport const classMemberOrSchoolAdminWhere = (userId: string) => ({\n OR: [\n { teachers: { some: { id: userId } } },\n { students: { some: { id: userId } } },\n schoolAdminForClassWhere(userId),\n ],\n});\n"],"names":[],"mappings":"AAAA;;GAEG;;;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IAC3D,EAAE,EAAE;QACF;YACE,MAAM,EAAE;gBACN,EAAE,EAAE;oBACF,WAAW,EAAE;wBACX,IAAI,EAAE;4BACJ,MAAM;4BACN,IAAI,EAAE,OAAgB;4BACtB,MAAM,EAAE,QAAiB;yBAC1B;qBACF;iBACF;aACF;SACF;QACD;YACE,MAAM,EAAE;gBACN,EAAE,EAAE;oBACF,KAAK,EAAE;wBACL,IAAI,EAAE;4BACJ,EAAE,EAAE,MAAM;4BACV,IAAI,EAAE,OAAgB;yBACvB;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACjE,EAAE,EAAE;QACF,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACtC,wBAAwB,CAAC,MAAM,CAAC;KACjC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IAChE,EAAE,EAAE;QACF,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACtC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACtC,wBAAwB,CAAC,MAAM,CAAC;KACjC;CACF,CAAC,CAAC","debug_id":"7b5148ef-61c8-512a-bcea-eacfc9066ef7"}
@@ -31,10 +31,10 @@ export declare const announcementSelect: {
31
31
  /** @returns Announcements for a class. */
32
32
  export declare function findAnnouncementsByClassId(classId: string): import(".prisma/client").Prisma.PrismaPromise<{
33
33
  id: string;
34
+ createdAt: Date;
34
35
  _count: {
35
36
  comments: number;
36
37
  };
37
- createdAt: Date;
38
38
  modifiedAt: Date | null;
39
39
  remarks: string;
40
40
  teacher: {
@@ -87,9 +87,24 @@ export declare function findAnnouncementByIdAndClass(id: string, classId: string
87
87
  };
88
88
  };
89
89
  }>;
90
- /** @returns Announcement by ID with class and teachers. */
90
+ /** @returns Announcement by ID with class teachers and school admins. */
91
91
  export declare function findAnnouncementWithClass(id: string): import(".prisma/client").Prisma.Prisma__AnnouncementClient<({
92
92
  class: {
93
+ school: ({
94
+ users: {
95
+ id: string;
96
+ }[];
97
+ memberships: {
98
+ userId: string;
99
+ }[];
100
+ } & {
101
+ name: string;
102
+ id: string;
103
+ logoId: string | null;
104
+ subdomain: string | null;
105
+ createdAt: Date;
106
+ updatedAt: Date;
107
+ }) | null;
93
108
  teachers: {
94
109
  id: string;
95
110
  username: string;
@@ -1 +1 @@
1
- {"version":3,"file":"announcement.d.ts","sourceRoot":"/","sources":["models/announcement.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B9B,CAAC;AAEF,0CAA0C;AAC1C,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;KAWzD;AAED,6CAA6C;AAC7C,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAKvE;AAED,2DAA2D;AAC3D,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoBnD;AAED,8BAA8B;AAC9B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GASA;AAED,uCAAuC;AACvC,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE;QAAE,EAAE,EAAE;YAAE,EAAE,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;CACvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAcF;AAED,mCAAmC;AACnC,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAMxE;AAED,8BAA8B;AAC9B,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;GAI5C"}
1
+ {"version":3,"file":"announcement.d.ts","sourceRoot":"/","sources":["models/announcement.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B9B,CAAC;AAEF,0CAA0C;AAC1C,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;KAWzD;AAED,6CAA6C;AAC7C,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAKvE;AAED,yEAAyE;AACzE,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCnD;AAED,8BAA8B;AAC9B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GASA;AAED,uCAAuC;AACvC,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE;QAAE,EAAE,EAAE;YAAE,EAAE,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;CACvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAcF;AAED,mCAAmC;AACnC,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAMxE;AAED,8BAA8B;AAC9B,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;GAI5C"}
@@ -2,7 +2,7 @@
2
2
  * Announcement model – announcements, attachments, comments.
3
3
  */
4
4
 
5
- !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]="897fb52e-f646-5b38-a7f5-276b83746de9")}catch(e){}}();
5
+ !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]="fff848bf-ce06-59fe-83ea-7a9d6e208421")}catch(e){}}();
6
6
  import { prisma } from "../lib/prisma.js";
7
7
  export const announcementSelect = {
8
8
  id: true,
@@ -54,13 +54,30 @@ export function findAnnouncementByIdAndClass(id, classId) {
54
54
  select: announcementSelect,
55
55
  });
56
56
  }
57
- /** @returns Announcement by ID with class and teachers. */
57
+ /** @returns Announcement by ID with class teachers and school admins. */
58
58
  export function findAnnouncementWithClass(id) {
59
59
  return prisma.announcement.findUnique({
60
60
  where: { id },
61
61
  include: {
62
62
  class: {
63
- include: { teachers: true },
63
+ include: {
64
+ teachers: true,
65
+ school: {
66
+ include: {
67
+ users: {
68
+ where: { role: "ADMIN" },
69
+ select: { id: true },
70
+ },
71
+ memberships: {
72
+ where: {
73
+ role: "ADMIN",
74
+ status: "ACTIVE",
75
+ },
76
+ select: { userId: true },
77
+ },
78
+ },
79
+ },
80
+ },
64
81
  },
65
82
  attachments: {
66
83
  select: {
@@ -117,4 +134,4 @@ export function deleteAnnouncement(id) {
117
134
  });
118
135
  }
119
136
  //# sourceMappingURL=announcement.js.map
120
- //# debugId=897fb52e-f646-5b38-a7f5-276b83746de9
137
+ //# debugId=fff848bf-ce06-59fe-83ea-7a9d6e208421
@@ -1 +1 @@
1
- {"version":3,"file":"announcement.js","sources":["models/announcement.ts"],"sourceRoot":"/","sourcesContent":["/**\n * Announcement model – announcements, attachments, comments.\n */\nimport { prisma } from \"../lib/prisma.js\";\n\nexport const announcementSelect = {\n id: true,\n teacher: {\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 remarks: true,\n createdAt: true,\n modifiedAt: true,\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};\n\n/** @returns Announcements for a class. */\nexport function findAnnouncementsByClassId(classId: string) {\n return prisma.announcement.findMany({\n where: { classId },\n select: {\n ...announcementSelect,\n _count: {\n select: { comments: true },\n },\n },\n orderBy: { createdAt: \"desc\" },\n });\n}\n\n/** @returns Announcement by ID and class. */\nexport function findAnnouncementByIdAndClass(id: string, classId: string) {\n return prisma.announcement.findFirst({\n where: { id, classId },\n select: announcementSelect,\n });\n}\n\n/** @returns Announcement by ID with class and teachers. */\nexport function findAnnouncementWithClass(id: string) {\n return prisma.announcement.findUnique({\n where: { id },\n include: {\n class: {\n include: { teachers: true },\n },\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n path: true,\n size: true,\n uploadStatus: true,\n thumbnail: { select: { path: true } },\n },\n },\n },\n });\n}\n\n/** Create an announcement. */\nexport function createAnnouncement(data: {\n remarks: string;\n teacherId: string;\n classId: string;\n}) {\n return prisma.announcement.create({\n data: {\n remarks: data.remarks,\n teacher: { connect: { id: data.teacherId } },\n class: { connect: { id: data.classId } },\n },\n select: announcementSelect,\n });\n}\n\n/** Update announcement attachments. */\nexport function updateAnnouncementAttachments(\n id: string,\n data: {\n connect?: { id: string }[];\n deleteMany?: { id: { in: string[] } };\n }\n) {\n return prisma.announcement.update({\n where: { id },\n data: {\n ...(data.connect?.length && {\n attachments: { connect: data.connect },\n }),\n ...(data.deleteMany && {\n attachments: { deleteMany: data.deleteMany },\n }),\n },\n select: announcementSelect,\n });\n}\n\n/** Update announcement remarks. */\nexport function updateAnnouncement(id: string, data: { remarks?: string }) {\n return prisma.announcement.update({\n where: { id },\n data,\n select: announcementSelect,\n });\n}\n\n/** Delete an announcement. */\nexport function deleteAnnouncement(id: string) {\n return prisma.announcement.delete({\n where: { id },\n });\n}\n"],"names":[],"mappings":"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","debug_id":"897fb52e-f646-5b38-a7f5-276b83746de9"}
1
+ {"version":3,"file":"announcement.js","sources":["models/announcement.ts"],"sourceRoot":"/","sourcesContent":["/**\n * Announcement model – announcements, attachments, comments.\n */\nimport { prisma } from \"../lib/prisma.js\";\n\nexport const announcementSelect = {\n id: true,\n teacher: {\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 remarks: true,\n createdAt: true,\n modifiedAt: true,\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};\n\n/** @returns Announcements for a class. */\nexport function findAnnouncementsByClassId(classId: string) {\n return prisma.announcement.findMany({\n where: { classId },\n select: {\n ...announcementSelect,\n _count: {\n select: { comments: true },\n },\n },\n orderBy: { createdAt: \"desc\" },\n });\n}\n\n/** @returns Announcement by ID and class. */\nexport function findAnnouncementByIdAndClass(id: string, classId: string) {\n return prisma.announcement.findFirst({\n where: { id, classId },\n select: announcementSelect,\n });\n}\n\n/** @returns Announcement by ID with class teachers and school admins. */\nexport function findAnnouncementWithClass(id: string) {\n return prisma.announcement.findUnique({\n where: { id },\n include: {\n class: {\n include: {\n teachers: true,\n school: {\n include: {\n users: {\n where: { role: \"ADMIN\" as const },\n select: { id: true },\n },\n memberships: {\n where: {\n role: \"ADMIN\" as const,\n status: \"ACTIVE\" as const,\n },\n select: { userId: true },\n },\n },\n },\n },\n },\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n path: true,\n size: true,\n uploadStatus: true,\n thumbnail: { select: { path: true } },\n },\n },\n },\n });\n}\n\n/** Create an announcement. */\nexport function createAnnouncement(data: {\n remarks: string;\n teacherId: string;\n classId: string;\n}) {\n return prisma.announcement.create({\n data: {\n remarks: data.remarks,\n teacher: { connect: { id: data.teacherId } },\n class: { connect: { id: data.classId } },\n },\n select: announcementSelect,\n });\n}\n\n/** Update announcement attachments. */\nexport function updateAnnouncementAttachments(\n id: string,\n data: {\n connect?: { id: string }[];\n deleteMany?: { id: { in: string[] } };\n }\n) {\n return prisma.announcement.update({\n where: { id },\n data: {\n ...(data.connect?.length && {\n attachments: { connect: data.connect },\n }),\n ...(data.deleteMany && {\n attachments: { deleteMany: data.deleteMany },\n }),\n },\n select: announcementSelect,\n });\n}\n\n/** Update announcement remarks. */\nexport function updateAnnouncement(id: string, data: { remarks?: string }) {\n return prisma.announcement.update({\n where: { id },\n data,\n select: announcementSelect,\n });\n}\n\n/** Delete an announcement. */\nexport function deleteAnnouncement(id: string) {\n return prisma.announcement.delete({\n where: { id },\n });\n}\n"],"names":[],"mappings":"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","debug_id":"fff848bf-ce06-59fe-83ea-7a9d6e208421"}
@@ -33,12 +33,6 @@ export declare function findAssignmentById(id: string): import(".prisma/client")
33
33
  }>;
34
34
  /** @returns Assignment with full details for get. */
35
35
  export declare function findAssignmentWithDetails(id: string): import(".prisma/client").Prisma.Prisma__AssignmentClient<({
36
- submissions: {
37
- student: {
38
- id: string;
39
- username: string;
40
- };
41
- }[];
42
36
  class: {
43
37
  name: string;
44
38
  id: string;
@@ -47,6 +41,12 @@ export declare function findAssignmentWithDetails(id: string): import(".prisma/c
47
41
  name: string;
48
42
  id: string;
49
43
  } | null;
44
+ submissions: {
45
+ student: {
46
+ id: string;
47
+ username: string;
48
+ };
49
+ }[];
50
50
  markScheme: {
51
51
  id: string;
52
52
  structured: string;
@@ -122,8 +122,8 @@ export declare function findAssignmentForDelete(id: string, teacherId: string):
122
122
  type: string;
123
123
  name: string;
124
124
  id: string;
125
- size: number | null;
126
125
  userId: string | null;
126
+ size: number | null;
127
127
  uploadedAt: Date | null;
128
128
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
129
129
  uploadUrl: string | null;
@@ -150,8 +150,8 @@ export declare function findAssignmentForDelete(id: string, teacherId: string):
150
150
  type: string;
151
151
  name: string;
152
152
  id: string;
153
- size: number | null;
154
153
  userId: string | null;
154
+ size: number | null;
155
155
  uploadedAt: Date | null;
156
156
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
157
157
  uploadUrl: string | null;
@@ -179,8 +179,8 @@ export declare function findAssignmentForDelete(id: string, teacherId: string):
179
179
  type: string;
180
180
  name: string;
181
181
  id: string;
182
- size: number | null;
183
182
  userId: string | null;
183
+ size: number | null;
184
184
  uploadedAt: Date | null;
185
185
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
186
186
  uploadUrl: string | null;
@@ -207,8 +207,8 @@ export declare function findAssignmentForDelete(id: string, teacherId: string):
207
207
  type: string;
208
208
  name: string;
209
209
  id: string;
210
- size: number | null;
211
210
  userId: string | null;
211
+ size: number | null;
212
212
  uploadedAt: Date | null;
213
213
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
214
214
  uploadUrl: string | null;
@@ -232,8 +232,8 @@ export declare function findAssignmentForDelete(id: string, teacherId: string):
232
232
  })[];
233
233
  } & {
234
234
  id: string;
235
- assignmentId: string;
236
235
  createdAt: Date;
236
+ assignmentId: string;
237
237
  modifiedAt: Date;
238
238
  studentId: string;
239
239
  extendedResponse: string | null;
@@ -253,8 +253,8 @@ export declare function findAssignmentForDelete(id: string, teacherId: string):
253
253
  type: string;
254
254
  name: string;
255
255
  id: string;
256
- size: number | null;
257
256
  userId: string | null;
257
+ size: number | null;
258
258
  uploadedAt: Date | null;
259
259
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
260
260
  uploadUrl: string | null;
@@ -281,8 +281,8 @@ export declare function findAssignmentForDelete(id: string, teacherId: string):
281
281
  type: string;
282
282
  name: string;
283
283
  id: string;
284
- size: number | null;
285
284
  userId: string | null;
285
+ size: number | null;
286
286
  uploadedAt: Date | null;
287
287
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
288
288
  uploadUrl: string | null;
@@ -404,8 +404,8 @@ export declare function findSubmissionByAssignmentAndStudent(assignmentId: strin
404
404
  type: string;
405
405
  name: string;
406
406
  id: string;
407
- size: number | null;
408
407
  userId: string | null;
408
+ size: number | null;
409
409
  uploadedAt: Date | null;
410
410
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
411
411
  uploadUrl: string | null;
@@ -432,8 +432,8 @@ export declare function findSubmissionByAssignmentAndStudent(assignmentId: strin
432
432
  type: string;
433
433
  name: string;
434
434
  id: string;
435
- size: number | null;
436
435
  userId: string | null;
436
+ size: number | null;
437
437
  uploadedAt: Date | null;
438
438
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
439
439
  uploadUrl: string | null;
@@ -460,10 +460,10 @@ export declare function findSubmissionByAssignmentAndStudent(assignmentId: strin
460
460
  username: string;
461
461
  profile: {
462
462
  id: string;
463
- userId: string;
464
463
  createdAt: Date;
465
- location: string | null;
466
464
  updatedAt: Date;
465
+ userId: string;
466
+ location: string | null;
467
467
  displayName: string | null;
468
468
  bio: string | null;
469
469
  website: string | null;
@@ -473,8 +473,8 @@ export declare function findSubmissionByAssignmentAndStudent(assignmentId: strin
473
473
  };
474
474
  } & {
475
475
  id: string;
476
- assignmentId: string;
477
476
  createdAt: Date;
477
+ assignmentId: string;
478
478
  modifiedAt: Date;
479
479
  studentId: string;
480
480
  extendedResponse: string | null;
@@ -549,8 +549,8 @@ export declare function findSubmissionByIdForClassMember(submissionId: string, c
549
549
  type: string;
550
550
  name: string;
551
551
  id: string;
552
- size: number | null;
553
552
  userId: string | null;
553
+ size: number | null;
554
554
  uploadedAt: Date | null;
555
555
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
556
556
  uploadUrl: string | null;
@@ -577,8 +577,8 @@ export declare function findSubmissionByIdForClassMember(submissionId: string, c
577
577
  type: string;
578
578
  name: string;
579
579
  id: string;
580
- size: number | null;
581
580
  userId: string | null;
581
+ size: number | null;
582
582
  uploadedAt: Date | null;
583
583
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
584
584
  uploadUrl: string | null;
@@ -605,10 +605,10 @@ export declare function findSubmissionByIdForClassMember(submissionId: string, c
605
605
  username: string;
606
606
  profile: {
607
607
  id: string;
608
- userId: string;
609
608
  createdAt: Date;
610
- location: string | null;
611
609
  updatedAt: Date;
610
+ userId: string;
611
+ location: string | null;
612
612
  displayName: string | null;
613
613
  bio: string | null;
614
614
  website: string | null;
@@ -618,8 +618,8 @@ export declare function findSubmissionByIdForClassMember(submissionId: string, c
618
618
  };
619
619
  } & {
620
620
  id: string;
621
- assignmentId: string;
622
621
  createdAt: Date;
622
+ assignmentId: string;
623
623
  modifiedAt: Date;
624
624
  studentId: string;
625
625
  extendedResponse: string | null;
@@ -691,8 +691,8 @@ export declare function findSubmissionForUpdate(submissionId: string, userId: st
691
691
  type: string;
692
692
  name: string;
693
693
  id: string;
694
- size: number | null;
695
694
  userId: string | null;
695
+ size: number | null;
696
696
  uploadedAt: Date | null;
697
697
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
698
698
  uploadUrl: string | null;
@@ -719,8 +719,8 @@ export declare function findSubmissionForUpdate(submissionId: string, userId: st
719
719
  type: string;
720
720
  name: string;
721
721
  id: string;
722
- size: number | null;
723
722
  userId: string | null;
723
+ size: number | null;
724
724
  uploadedAt: Date | null;
725
725
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
726
726
  uploadUrl: string | null;
@@ -744,8 +744,8 @@ export declare function findSubmissionForUpdate(submissionId: string, userId: st
744
744
  })[];
745
745
  } & {
746
746
  id: string;
747
- assignmentId: string;
748
747
  createdAt: Date;
748
+ assignmentId: string;
749
749
  modifiedAt: Date;
750
750
  studentId: string;
751
751
  extendedResponse: string | null;
@@ -820,8 +820,8 @@ export declare function createSubmission(assignmentId: string, studentId: string
820
820
  type: string;
821
821
  name: string;
822
822
  id: string;
823
- size: number | null;
824
823
  userId: string | null;
824
+ size: number | null;
825
825
  uploadedAt: Date | null;
826
826
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
827
827
  uploadUrl: string | null;
@@ -848,8 +848,8 @@ export declare function createSubmission(assignmentId: string, studentId: string
848
848
  type: string;
849
849
  name: string;
850
850
  id: string;
851
- size: number | null;
852
851
  userId: string | null;
852
+ size: number | null;
853
853
  uploadedAt: Date | null;
854
854
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
855
855
  uploadUrl: string | null;
@@ -877,8 +877,8 @@ export declare function createSubmission(assignmentId: string, studentId: string
877
877
  };
878
878
  } & {
879
879
  id: string;
880
- assignmentId: string;
881
880
  createdAt: Date;
881
+ assignmentId: string;
882
882
  modifiedAt: Date;
883
883
  studentId: string;
884
884
  extendedResponse: string | null;
@@ -946,6 +946,38 @@ export declare function findAssignmentWithClassForTeacher(assignmentId: string,
946
946
  };
947
947
  };
948
948
  }>;
949
+ /**
950
+ * Clone an assignment into another class with a new title: copies settings, duplicates linked
951
+ * worksheets into the target class, clones attachment file records (same storage path),
952
+ * creates empty submissions for all students in the target class, and does not copy the
953
+ * calendar event link or per-student “assigned to” overrides.
954
+ */
955
+ export declare function duplicateAssignment(sourceAssignmentId: string, targetClassId: string, title: string, duplicatingUserId: string): Promise<{
956
+ type: import(".prisma/client").$Enums.AssignmentType;
957
+ id: string;
958
+ createdAt: Date | null;
959
+ modifiedAt: Date | null;
960
+ classId: string;
961
+ title: string;
962
+ instructions: string;
963
+ dueDate: Date;
964
+ teacherId: string;
965
+ acceptFiles: boolean;
966
+ acceptExtendedResponse: boolean;
967
+ acceptWorksheet: boolean;
968
+ gradeWithAI: boolean;
969
+ aiPolicyLevel: number;
970
+ sectionId: string | null;
971
+ graded: boolean;
972
+ maxGrade: number | null;
973
+ weight: number;
974
+ inProgress: boolean;
975
+ template: boolean;
976
+ eventId: string | null;
977
+ markSchemeId: string | null;
978
+ order: number | null;
979
+ gradingBoundaryId: string | null;
980
+ } | null>;
949
981
  /** @returns Submissions for assignment (teacher view). */
950
982
  export declare function findSubmissionsByAssignmentForTeacher(assignmentId: string, teacherId: string): import(".prisma/client").Prisma.PrismaPromise<({
951
983
  assignment: {
@@ -998,8 +1030,8 @@ export declare function findSubmissionsByAssignmentForTeacher(assignmentId: stri
998
1030
  type: string;
999
1031
  name: string;
1000
1032
  id: string;
1001
- size: number | null;
1002
1033
  userId: string | null;
1034
+ size: number | null;
1003
1035
  uploadedAt: Date | null;
1004
1036
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1005
1037
  uploadUrl: string | null;
@@ -1026,8 +1058,8 @@ export declare function findSubmissionsByAssignmentForTeacher(assignmentId: stri
1026
1058
  type: string;
1027
1059
  name: string;
1028
1060
  id: string;
1029
- size: number | null;
1030
1061
  userId: string | null;
1062
+ size: number | null;
1031
1063
  uploadedAt: Date | null;
1032
1064
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1033
1065
  uploadUrl: string | null;
@@ -1060,8 +1092,8 @@ export declare function findSubmissionsByAssignmentForTeacher(assignmentId: stri
1060
1092
  };
1061
1093
  } & {
1062
1094
  id: string;
1063
- assignmentId: string;
1064
1095
  createdAt: Date;
1096
+ assignmentId: string;
1065
1097
  modifiedAt: Date;
1066
1098
  studentId: string;
1067
1099
  extendedResponse: string | null;
@@ -1127,8 +1159,8 @@ export declare function findSubmissionForTeacherUpdate(submissionId: string, tea
1127
1159
  type: string;
1128
1160
  name: string;
1129
1161
  id: string;
1130
- size: number | null;
1131
1162
  userId: string | null;
1163
+ size: number | null;
1132
1164
  uploadedAt: Date | null;
1133
1165
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1134
1166
  uploadUrl: string | null;
@@ -1155,8 +1187,8 @@ export declare function findSubmissionForTeacherUpdate(submissionId: string, tea
1155
1187
  type: string;
1156
1188
  name: string;
1157
1189
  id: string;
1158
- size: number | null;
1159
1190
  userId: string | null;
1191
+ size: number | null;
1160
1192
  uploadedAt: Date | null;
1161
1193
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1162
1194
  uploadUrl: string | null;
@@ -1184,8 +1216,8 @@ export declare function findSubmissionForTeacherUpdate(submissionId: string, tea
1184
1216
  type: string;
1185
1217
  name: string;
1186
1218
  id: string;
1187
- size: number | null;
1188
1219
  userId: string | null;
1220
+ size: number | null;
1189
1221
  uploadedAt: Date | null;
1190
1222
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1191
1223
  uploadUrl: string | null;
@@ -1212,8 +1244,8 @@ export declare function findSubmissionForTeacherUpdate(submissionId: string, tea
1212
1244
  type: string;
1213
1245
  name: string;
1214
1246
  id: string;
1215
- size: number | null;
1216
1247
  userId: string | null;
1248
+ size: number | null;
1217
1249
  uploadedAt: Date | null;
1218
1250
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
1219
1251
  uploadUrl: string | null;
@@ -1237,8 +1269,8 @@ export declare function findSubmissionForTeacherUpdate(submissionId: string, tea
1237
1269
  })[];
1238
1270
  } & {
1239
1271
  id: string;
1240
- assignmentId: string;
1241
1272
  createdAt: Date;
1273
+ assignmentId: string;
1242
1274
  modifiedAt: Date;
1243
1275
  studentId: string;
1244
1276
  extendedResponse: string | null;