@studious-lms/server 1.7.0 → 1.9.0

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 (212) hide show
  1. package/dist/middleware/security.d.ts.map +1 -1
  2. package/dist/middleware/security.js +3 -3
  3. package/dist/middleware/security.js.map +1 -1
  4. package/dist/models/access.d.ts +21 -66
  5. package/dist/models/access.d.ts.map +1 -1
  6. package/dist/models/access.js +10 -26
  7. package/dist/models/access.js.map +1 -1
  8. package/dist/models/agenda.d.ts +4 -2
  9. package/dist/models/agenda.d.ts.map +1 -1
  10. package/dist/models/announcement.d.ts +4 -3
  11. package/dist/models/announcement.d.ts.map +1 -1
  12. package/dist/models/announcement.js +2 -3
  13. package/dist/models/announcement.js.map +1 -1
  14. package/dist/models/assignment.d.ts +40 -33
  15. package/dist/models/assignment.d.ts.map +1 -1
  16. package/dist/models/auth.d.ts +2 -4
  17. package/dist/models/auth.d.ts.map +1 -1
  18. package/dist/models/auth.js +2 -3
  19. package/dist/models/auth.js.map +1 -1
  20. package/dist/models/class.d.ts +34 -6
  21. package/dist/models/class.d.ts.map +1 -1
  22. package/dist/models/class.js +15 -2
  23. package/dist/models/class.js.map +1 -1
  24. package/dist/models/cloudStorage.d.ts +153 -0
  25. package/dist/models/cloudStorage.d.ts.map +1 -0
  26. package/dist/models/cloudStorage.js +295 -0
  27. package/dist/models/cloudStorage.js.map +1 -0
  28. package/dist/models/comment.d.ts +0 -24
  29. package/dist/models/comment.d.ts.map +1 -1
  30. package/dist/models/comment.js +2 -6
  31. package/dist/models/comment.js.map +1 -1
  32. package/dist/models/conversation.d.ts +22 -22
  33. package/dist/models/department.d.ts +154 -0
  34. package/dist/models/department.d.ts.map +1 -0
  35. package/dist/models/department.js +135 -0
  36. package/dist/models/department.js.map +1 -0
  37. package/dist/models/event.d.ts +10 -4
  38. package/dist/models/event.d.ts.map +1 -1
  39. package/dist/models/event.js +2 -5
  40. package/dist/models/event.js.map +1 -1
  41. package/dist/models/file.d.ts +52 -36
  42. package/dist/models/file.d.ts.map +1 -1
  43. package/dist/models/file.js +4 -42
  44. package/dist/models/file.js.map +1 -1
  45. package/dist/models/folder.d.ts +47 -0
  46. package/dist/models/folder.d.ts.map +1 -1
  47. package/dist/models/labChat.d.ts +11 -9
  48. package/dist/models/labChat.d.ts.map +1 -1
  49. package/dist/models/message.d.ts +46 -12
  50. package/dist/models/message.d.ts.map +1 -1
  51. package/dist/models/message.js +19 -10
  52. package/dist/models/message.js.map +1 -1
  53. package/dist/models/newtonChat.d.ts +2 -1
  54. package/dist/models/newtonChat.d.ts.map +1 -1
  55. package/dist/models/school.d.ts +45 -12
  56. package/dist/models/school.d.ts.map +1 -1
  57. package/dist/models/school.js +19 -2
  58. package/dist/models/school.js.map +1 -1
  59. package/dist/models/section.d.ts +2 -1
  60. package/dist/models/section.d.ts.map +1 -1
  61. package/dist/models/tag.d.ts +117 -0
  62. package/dist/models/tag.d.ts.map +1 -0
  63. package/dist/models/tag.js +113 -0
  64. package/dist/models/tag.js.map +1 -0
  65. package/dist/models/worksheet.d.ts +3 -0
  66. package/dist/models/worksheet.d.ts.map +1 -1
  67. package/dist/pipelines/aiLabChatContract.d.ts +8 -8
  68. package/dist/routers/_app.d.ts +6704 -5222
  69. package/dist/routers/_app.d.ts.map +1 -1
  70. package/dist/routers/_app.js +8 -2
  71. package/dist/routers/_app.js.map +1 -1
  72. package/dist/routers/agenda.d.ts +4 -2
  73. package/dist/routers/agenda.d.ts.map +1 -1
  74. package/dist/routers/announcement.d.ts.map +1 -1
  75. package/dist/routers/announcement.js +3 -5
  76. package/dist/routers/announcement.js.map +1 -1
  77. package/dist/routers/assignment.d.ts +49 -40
  78. package/dist/routers/assignment.d.ts.map +1 -1
  79. package/dist/routers/assignment.js +2 -3
  80. package/dist/routers/assignment.js.map +1 -1
  81. package/dist/routers/class.d.ts +92 -19
  82. package/dist/routers/class.d.ts.map +1 -1
  83. package/dist/routers/class.js +5 -2
  84. package/dist/routers/class.js.map +1 -1
  85. package/dist/routers/conversation.d.ts +5 -5
  86. package/dist/routers/department.d.ts +293 -0
  87. package/dist/routers/department.d.ts.map +1 -0
  88. package/dist/routers/department.js +93 -0
  89. package/dist/routers/department.js.map +1 -0
  90. package/dist/routers/event.d.ts +4 -3
  91. package/dist/routers/event.d.ts.map +1 -1
  92. package/dist/routers/file.d.ts +10 -8
  93. package/dist/routers/file.d.ts.map +1 -1
  94. package/dist/routers/file.js +26 -17
  95. package/dist/routers/file.js.map +1 -1
  96. package/dist/routers/folder.d.ts +163 -186
  97. package/dist/routers/folder.d.ts.map +1 -1
  98. package/dist/routers/folder.js +102 -88
  99. package/dist/routers/folder.js.map +1 -1
  100. package/dist/routers/labChat.d.ts +13 -4
  101. package/dist/routers/labChat.d.ts.map +1 -1
  102. package/dist/routers/message.d.ts +20 -2
  103. package/dist/routers/message.d.ts.map +1 -1
  104. package/dist/routers/newtonChat.d.ts +10 -1
  105. package/dist/routers/newtonChat.d.ts.map +1 -1
  106. package/dist/routers/permissions.d.ts +120 -0
  107. package/dist/routers/permissions.d.ts.map +1 -0
  108. package/dist/routers/permissions.js +50 -0
  109. package/dist/routers/permissions.js.map +1 -0
  110. package/dist/routers/school.d.ts +160 -17
  111. package/dist/routers/school.d.ts.map +1 -1
  112. package/dist/routers/school.js +46 -3
  113. package/dist/routers/school.js.map +1 -1
  114. package/dist/routers/tag.d.ts +119 -0
  115. package/dist/routers/tag.d.ts.map +1 -0
  116. package/dist/routers/tag.js +52 -0
  117. package/dist/routers/tag.js.map +1 -0
  118. package/dist/routers/worksheet.d.ts +1 -0
  119. package/dist/routers/worksheet.d.ts.map +1 -1
  120. package/dist/seedDatabase.d.ts +0 -1
  121. package/dist/seedDatabase.d.ts.map +1 -1
  122. package/dist/services/agenda.d.ts +4 -2
  123. package/dist/services/agenda.d.ts.map +1 -1
  124. package/dist/services/assignment.d.ts +49 -40
  125. package/dist/services/assignment.d.ts.map +1 -1
  126. package/dist/services/class.d.ts +92 -19
  127. package/dist/services/class.d.ts.map +1 -1
  128. package/dist/services/class.js +92 -5
  129. package/dist/services/class.js.map +1 -1
  130. package/dist/services/conversation.d.ts +5 -5
  131. package/dist/services/department.d.ts +200 -0
  132. package/dist/services/department.d.ts.map +1 -0
  133. package/dist/services/department.js +368 -0
  134. package/dist/services/department.js.map +1 -0
  135. package/dist/services/event.d.ts +4 -3
  136. package/dist/services/event.d.ts.map +1 -1
  137. package/dist/services/file.d.ts +105 -3
  138. package/dist/services/file.d.ts.map +1 -1
  139. package/dist/services/file.js +167 -41
  140. package/dist/services/file.js.map +1 -1
  141. package/dist/services/folder.d.ts +220 -149
  142. package/dist/services/folder.d.ts.map +1 -1
  143. package/dist/services/folder.js +326 -196
  144. package/dist/services/folder.js.map +1 -1
  145. package/dist/services/labChat.d.ts +13 -4
  146. package/dist/services/labChat.d.ts.map +1 -1
  147. package/dist/services/labChat.js +4 -3
  148. package/dist/services/labChat.js.map +1 -1
  149. package/dist/services/message.d.ts +20 -2
  150. package/dist/services/message.d.ts.map +1 -1
  151. package/dist/services/message.js +7 -23
  152. package/dist/services/message.js.map +1 -1
  153. package/dist/services/newtonChat.d.ts +9 -0
  154. package/dist/services/newtonChat.d.ts.map +1 -1
  155. package/dist/services/newtonChat.js +4 -3
  156. package/dist/services/newtonChat.js.map +1 -1
  157. package/dist/services/permissions.d.ts +188 -0
  158. package/dist/services/permissions.d.ts.map +1 -0
  159. package/dist/services/permissions.js +661 -0
  160. package/dist/services/permissions.js.map +1 -0
  161. package/dist/services/school.d.ts +142 -15
  162. package/dist/services/school.d.ts.map +1 -1
  163. package/dist/services/school.js +308 -54
  164. package/dist/services/school.js.map +1 -1
  165. package/dist/services/tag.d.ts +71 -0
  166. package/dist/services/tag.d.ts.map +1 -0
  167. package/dist/services/tag.js +178 -0
  168. package/dist/services/tag.js.map +1 -0
  169. package/dist/services/worksheet.d.ts +1 -0
  170. package/dist/services/worksheet.d.ts.map +1 -1
  171. package/dist/utils/aiUser.d.ts.map +1 -1
  172. package/dist/utils/aiUser.js +2 -3
  173. package/dist/utils/aiUser.js.map +1 -1
  174. package/package.json +1 -1
  175. package/prisma/migrations/20260509220000_institution_overhaul/migration.sql +184 -0
  176. package/prisma/migrations/20260510170000_add_folder_permissions/migration.sql +93 -0
  177. package/prisma/schema.prisma +193 -35
  178. package/src/middleware/security.ts +1 -1
  179. package/src/models/access.ts +8 -24
  180. package/src/models/announcement.ts +0 -1
  181. package/src/models/auth.ts +0 -1
  182. package/src/models/class.ts +13 -0
  183. package/src/models/cloudStorage.ts +327 -0
  184. package/src/models/comment.ts +0 -4
  185. package/src/models/department.ts +159 -0
  186. package/src/models/event.ts +0 -3
  187. package/src/models/file.ts +2 -40
  188. package/src/models/message.ts +19 -5
  189. package/src/models/school.ts +26 -0
  190. package/src/models/tag.ts +140 -0
  191. package/src/routers/_app.ts +6 -0
  192. package/src/routers/announcement.ts +1 -3
  193. package/src/routers/assignment.ts +0 -1
  194. package/src/routers/class.ts +3 -0
  195. package/src/routers/department.ts +174 -0
  196. package/src/routers/file.ts +29 -26
  197. package/src/routers/folder.ts +127 -118
  198. package/src/routers/permissions.ts +71 -0
  199. package/src/routers/school.ts +83 -0
  200. package/src/routers/tag.ts +78 -0
  201. package/src/services/class.ts +109 -4
  202. package/src/services/department.ts +478 -0
  203. package/src/services/file.ts +172 -43
  204. package/src/services/folder.ts +399 -237
  205. package/src/services/labChat.ts +2 -1
  206. package/src/services/message.ts +5 -21
  207. package/src/services/newtonChat.ts +2 -1
  208. package/src/services/permissions.ts +778 -0
  209. package/src/services/school.ts +369 -57
  210. package/src/services/tag.ts +229 -0
  211. package/src/utils/aiUser.ts +0 -1
  212. package/tests/unit/services/permissions.test.ts +463 -0
@@ -7,6 +7,7 @@ export declare function findClassWithTeacher(classId: string, teacherId: string)
7
7
  color: string | null;
8
8
  section: string;
9
9
  syllabus: string | null;
10
+ departmentId: string | null;
10
11
  } | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
11
12
  datasources: {
12
13
  db: {
@@ -20,6 +21,9 @@ export declare function findFolderById(folderId: string): import(".prisma/client
20
21
  id: string;
21
22
  color: string | null;
22
23
  classId: string | null;
24
+ schoolStorageId: string | null;
25
+ personalOwnerId: string | null;
26
+ scope: import(".prisma/client").$Enums.FolderScope;
23
27
  parentFolderId: string | null;
24
28
  } | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
25
29
  datasources: {
@@ -38,12 +42,16 @@ export declare function findFolderByIdWithClass(folderId: string): import(".pris
38
42
  color: string | null;
39
43
  section: string;
40
44
  syllabus: string | null;
45
+ departmentId: string | null;
41
46
  } | null;
42
47
  } & {
43
48
  name: string;
44
49
  id: string;
45
50
  color: string | null;
46
51
  classId: string | null;
52
+ schoolStorageId: string | null;
53
+ personalOwnerId: string | null;
54
+ scope: import(".prisma/client").$Enums.FolderScope;
47
55
  parentFolderId: string | null;
48
56
  }) | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
49
57
  datasources: {
@@ -58,6 +66,9 @@ export declare function findRootFolderByClassId(classId: string): import(".prism
58
66
  id: string;
59
67
  color: string | null;
60
68
  classId: string | null;
69
+ schoolStorageId: string | null;
70
+ personalOwnerId: string | null;
71
+ scope: import(".prisma/client").$Enums.FolderScope;
61
72
  parentFolderId: string | null;
62
73
  } | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
63
74
  datasources: {
@@ -72,6 +83,9 @@ export declare function findOrCreateRootFolder(classId: string): Promise<{
72
83
  id: string;
73
84
  color: string | null;
74
85
  classId: string | null;
86
+ schoolStorageId: string | null;
87
+ personalOwnerId: string | null;
88
+ scope: import(".prisma/client").$Enums.FolderScope;
75
89
  parentFolderId: string | null;
76
90
  }>;
77
91
  /** Create a folder. */
@@ -106,6 +120,9 @@ export declare function createFolder(data: {
106
120
  id: string;
107
121
  color: string | null;
108
122
  classId: string | null;
123
+ schoolStorageId: string | null;
124
+ personalOwnerId: string | null;
125
+ scope: import(".prisma/client").$Enums.FolderScope;
109
126
  parentFolderId: string | null;
110
127
  }, never, import("@prisma/client/runtime/library.js").DefaultArgs, {
111
128
  datasources: {
@@ -145,6 +162,9 @@ export declare function findFolderWithContents(folderId: string): import(".prism
145
162
  id: string;
146
163
  color: string | null;
147
164
  classId: string | null;
165
+ schoolStorageId: string | null;
166
+ personalOwnerId: string | null;
167
+ scope: import(".prisma/client").$Enums.FolderScope;
148
168
  parentFolderId: string | null;
149
169
  }) | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
150
170
  datasources: {
@@ -180,6 +200,9 @@ export declare function findChildFolders(parentFolderId: string): import(".prism
180
200
  id: string;
181
201
  color: string | null;
182
202
  classId: string | null;
203
+ schoolStorageId: string | null;
204
+ personalOwnerId: string | null;
205
+ scope: import(".prisma/client").$Enums.FolderScope;
183
206
  parentFolderId: string | null;
184
207
  })[]>;
185
208
  /** @returns Root folder with contents for a class. */
@@ -215,6 +238,9 @@ export declare function findRootFolderWithContents(classId: string): import(".pr
215
238
  id: string;
216
239
  color: string | null;
217
240
  classId: string | null;
241
+ schoolStorageId: string | null;
242
+ personalOwnerId: string | null;
243
+ scope: import(".prisma/client").$Enums.FolderScope;
218
244
  parentFolderId: string | null;
219
245
  }) | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
220
246
  datasources: {
@@ -234,6 +260,9 @@ export declare function findFolderWithCount(folderId: string, classId: string):
234
260
  id: string;
235
261
  color: string | null;
236
262
  classId: string | null;
263
+ schoolStorageId: string | null;
264
+ personalOwnerId: string | null;
265
+ scope: import(".prisma/client").$Enums.FolderScope;
237
266
  parentFolderId: string | null;
238
267
  }) | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
239
268
  datasources: {
@@ -253,6 +282,9 @@ export declare function findFolderByIdWithCount(folderId: string): import(".pris
253
282
  id: string;
254
283
  color: string | null;
255
284
  classId: string | null;
285
+ schoolStorageId: string | null;
286
+ personalOwnerId: string | null;
287
+ scope: import(".prisma/client").$Enums.FolderScope;
256
288
  parentFolderId: string | null;
257
289
  }) | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
258
290
  datasources: {
@@ -267,6 +299,9 @@ export declare function deleteFolderById(folderId: string): import(".prisma/clie
267
299
  id: string;
268
300
  color: string | null;
269
301
  classId: string | null;
302
+ schoolStorageId: string | null;
303
+ personalOwnerId: string | null;
304
+ scope: import(".prisma/client").$Enums.FolderScope;
270
305
  parentFolderId: string | null;
271
306
  }, never, import("@prisma/client/runtime/library.js").DefaultArgs, {
272
307
  datasources: {
@@ -302,6 +337,9 @@ export declare function updateFolderParent(folderId: string, parentFolderId: str
302
337
  id: string;
303
338
  color: string | null;
304
339
  classId: string | null;
340
+ schoolStorageId: string | null;
341
+ personalOwnerId: string | null;
342
+ scope: import(".prisma/client").$Enums.FolderScope;
305
343
  parentFolderId: string | null;
306
344
  }, never, import("@prisma/client/runtime/library.js").DefaultArgs, {
307
345
  datasources: {
@@ -340,6 +378,9 @@ export declare function updateFolder(folderId: string, data: {
340
378
  id: string;
341
379
  color: string | null;
342
380
  classId: string | null;
381
+ schoolStorageId: string | null;
382
+ personalOwnerId: string | null;
383
+ scope: import(".prisma/client").$Enums.FolderScope;
343
384
  parentFolderId: string | null;
344
385
  }, never, import("@prisma/client/runtime/library.js").DefaultArgs, {
345
386
  datasources: {
@@ -354,6 +395,9 @@ export declare function findFolderByIdForTraversal(id: string): import(".prisma/
354
395
  id: string;
355
396
  color: string | null;
356
397
  classId: string | null;
398
+ schoolStorageId: string | null;
399
+ personalOwnerId: string | null;
400
+ scope: import(".prisma/client").$Enums.FolderScope;
357
401
  parentFolderId: string | null;
358
402
  } | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
359
403
  datasources: {
@@ -368,6 +412,9 @@ export declare function findFolderParents(folderId: string): import(".prisma/cli
368
412
  id: string;
369
413
  color: string | null;
370
414
  classId: string | null;
415
+ schoolStorageId: string | null;
416
+ personalOwnerId: string | null;
417
+ scope: import(".prisma/client").$Enums.FolderScope;
371
418
  parentFolderId: string | null;
372
419
  } | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
373
420
  datasources: {
@@ -1 +1 @@
1
- {"version":3,"file":"folder.d.ts","sourceRoot":"/","sources":["models/folder.ts"],"names":[],"mappings":"AAsBA,2DAA2D;AAC3D,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;GAOtE;AAED,6BAA6B;AAC7B,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;GAI9C;AAED,kCAAkC;AAClC,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;GAKvD;AAED,wCAAwC;AACxC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;GAOtD;AAED,6CAA6C;AAC7C,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM;;;;;;GAW3D;AAED,uBAAuB;AACvB,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqBA;AAcD,oDAAoD;AACpD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAKtD;AAED,qCAAqC;AACrC,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;MAetD;AAED,sDAAsD;AACtD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkBzD;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;GAOpE;AAED,+CAA+C;AAC/C,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;GAOvD;AAED,uBAAuB;AACvB,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;GAIhD;AAED,iCAAiC;AACjC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAS1E;AAED,oCAAoC;AACpC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUxC;AAED,0CAA0C;AAC1C,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;GAIpD;AAED,6BAA6B;AAC7B,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;GAIjD"}
1
+ {"version":3,"file":"folder.d.ts","sourceRoot":"/","sources":["models/folder.ts"],"names":[],"mappings":"AAsBA,2DAA2D;AAC3D,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;GAOtE;AAED,6BAA6B;AAC7B,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;GAI9C;AAED,kCAAkC;AAClC,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;GAKvD;AAED,wCAAwC;AACxC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;GAOtD;AAED,6CAA6C;AAC7C,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM;;;;;;;;;GAW3D;AAED,uBAAuB;AACvB,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqBA;AAcD,oDAAoD;AACpD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAKtD;AAED,qCAAqC;AACrC,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAetD;AAED,sDAAsD;AACtD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkBzD;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;GAOpE;AAED,+CAA+C;AAC/C,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;GAOvD;AAED,uBAAuB;AACvB,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;GAIhD;AAED,iCAAiC;AACjC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAS1E;AAED,oCAAoC;AACpC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUxC;AAED,0CAA0C;AAC1C,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;GAIpD;AAED,6BAA6B;AAC7B,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;GAIjD"}
@@ -24,6 +24,7 @@ export declare function findClassWithTeachersForLab(classId: string, teacherId:
24
24
  color: string | null;
25
25
  section: string;
26
26
  syllabus: string | null;
27
+ departmentId: string | null;
27
28
  }) | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
28
29
  datasources: {
29
30
  db: {
@@ -51,8 +52,8 @@ export declare function findLabChatByMember(labChatId: string, userId: string):
51
52
  };
52
53
  } & {
53
54
  id: string;
54
- role: import(".prisma/client").$Enums.ConversationRole;
55
55
  userId: string;
56
+ role: import(".prisma/client").$Enums.ConversationRole;
56
57
  conversationId: string;
57
58
  joinedAt: Date;
58
59
  hiddenAt: Date | null;
@@ -80,8 +81,8 @@ export declare function findLabChatByMember(labChatId: string, userId: string):
80
81
  id: string;
81
82
  createdAt: Date;
82
83
  updatedAt: Date;
83
- conversationId: string;
84
84
  classId: string;
85
+ conversationId: string;
85
86
  title: string;
86
87
  createdById: string;
87
88
  }) | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
@@ -101,8 +102,8 @@ export declare function findLabChatByTeacher(labChatId: string, userId: string):
101
102
  id: string;
102
103
  createdAt: Date;
103
104
  updatedAt: Date;
104
- conversationId: string;
105
105
  classId: string;
106
+ conversationId: string;
106
107
  title: string;
107
108
  createdById: string;
108
109
  }) | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
@@ -132,8 +133,8 @@ export declare function findLabChatById(labChatId: string): import(".prisma/clie
132
133
  };
133
134
  } & {
134
135
  id: string;
135
- role: import(".prisma/client").$Enums.ConversationRole;
136
136
  userId: string;
137
+ role: import(".prisma/client").$Enums.ConversationRole;
137
138
  conversationId: string;
138
139
  joinedAt: Date;
139
140
  hiddenAt: Date | null;
@@ -161,8 +162,8 @@ export declare function findLabChatById(labChatId: string): import(".prisma/clie
161
162
  id: string;
162
163
  createdAt: Date;
163
164
  updatedAt: Date;
164
- conversationId: string;
165
165
  classId: string;
166
+ conversationId: string;
166
167
  title: string;
167
168
  createdById: string;
168
169
  }) | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
@@ -181,6 +182,7 @@ export declare function findClassMembership(classId: string, userId: string): im
181
182
  color: string | null;
182
183
  section: string;
183
184
  syllabus: string | null;
185
+ departmentId: string | null;
184
186
  } | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
185
187
  datasources: {
186
188
  db: {
@@ -232,8 +234,8 @@ export declare function findLabChatsByClass(classId: string): import(".prisma/cl
232
234
  id: string;
233
235
  createdAt: Date;
234
236
  updatedAt: Date;
235
- conversationId: string;
236
237
  classId: string;
238
+ conversationId: string;
237
239
  title: string;
238
240
  createdById: string;
239
241
  })[]>;
@@ -247,8 +249,8 @@ export declare function findLabChatForPost(labChatId: string, userId: string): i
247
249
  id: string;
248
250
  createdAt: Date;
249
251
  updatedAt: Date;
250
- conversationId: string;
251
252
  classId: string;
253
+ conversationId: string;
252
254
  title: string;
253
255
  createdById: string;
254
256
  }) | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
@@ -264,8 +266,8 @@ export declare function findLabChatForDelete(labChatId: string, userId: string):
264
266
  id: string;
265
267
  createdAt: Date;
266
268
  updatedAt: Date;
267
- conversationId: string;
268
269
  classId: string;
270
+ conversationId: string;
269
271
  title: string;
270
272
  createdById: string;
271
273
  } | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
@@ -278,8 +280,8 @@ export declare function findLabChatForDelete(labChatId: string, userId: string):
278
280
  /** @returns Conversation members for mentioned user IDs. */
279
281
  export declare function findMentionedMemberships(conversationId: string, userIds: string[]): import(".prisma/client").Prisma.PrismaPromise<{
280
282
  id: string;
281
- role: import(".prisma/client").$Enums.ConversationRole;
282
283
  userId: string;
284
+ role: import(".prisma/client").$Enums.ConversationRole;
283
285
  conversationId: string;
284
286
  joinedAt: Date;
285
287
  hiddenAt: Date | null;
@@ -1 +1 @@
1
- {"version":3,"file":"labChat.d.ts","sourceRoot":"/","sources":["models/labChat.ts"],"names":[],"mappings":"AAoDA,kEAAkE;AAClE,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiC7E;AAED,0DAA0D;AAC1D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUpE;AAED,kEAAkE;AAClE,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;GAYrE;AAED,+BAA+B;AAC/B,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAKhD;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;GAOlE;AAED,sCAAsC;AACtC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAwClD;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;GAYnE;AAED,sDAAsD;AACtD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;GAOrE;AAED,4DAA4D;AAC5D,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EAAE;;;;;;;;;KAQlB"}
1
+ {"version":3,"file":"labChat.d.ts","sourceRoot":"/","sources":["models/labChat.ts"],"names":[],"mappings":"AAoDA,kEAAkE;AAClE,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiC7E;AAED,0DAA0D;AAC1D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUpE;AAED,kEAAkE;AAClE,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;GAYrE;AAED,+BAA+B;AAC/B,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAKhD;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;GAOlE;AAED,sCAAsC;AACtC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAwClD;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;GAYnE;AAED,sDAAsD;AACtD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;GAOrE;AAED,4DAA4D;AAC5D,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EAAE;;;;;;;;;KAQlB"}
@@ -1,8 +1,33 @@
1
+ /**
2
+ * Message model – messages, attachments, mentions, unread counts.
3
+ */
4
+ import type { Prisma } from "@prisma/client";
5
+ /**
6
+ * Canonical shape for File rows surfaced as message attachments.
7
+ * Use this everywhere a message (list, send, update, suggestion broadcast)
8
+ * exposes attached files so the wire shape stays in sync.
9
+ */
10
+ export declare const messageFileSelect: {
11
+ readonly id: true;
12
+ readonly name: true;
13
+ readonly type: true;
14
+ readonly size: true;
15
+ readonly path: true;
16
+ readonly uploadedAt: true;
17
+ readonly uploadStatus: true;
18
+ readonly thumbnailId: true;
19
+ readonly thumbnail: {
20
+ readonly select: {
21
+ readonly id: true;
22
+ readonly path: true;
23
+ };
24
+ };
25
+ };
1
26
  /** @returns User's membership in a conversation. */
2
- export declare function findConversationMembership(conversationId: string, userId: string): import(".prisma/client").Prisma.Prisma__ConversationMemberClient<{
27
+ export declare function findConversationMembership(conversationId: string, userId: string): Prisma.Prisma__ConversationMemberClient<{
3
28
  id: string;
4
- role: import(".prisma/client").$Enums.ConversationRole;
5
29
  userId: string;
30
+ role: import(".prisma/client").$Enums.ConversationRole;
6
31
  conversationId: string;
7
32
  joinedAt: Date;
8
33
  hiddenAt: Date | null;
@@ -19,7 +44,7 @@ export declare function findConversationMembership(conversationId: string, userI
19
44
  export declare function findMessages(conversationId: string, options: {
20
45
  cursor?: Date;
21
46
  limit: number;
22
- }): import(".prisma/client").Prisma.PrismaPromise<({
47
+ }): Prisma.PrismaPromise<({
23
48
  mentions: ({
24
49
  user: {
25
50
  id: string;
@@ -35,9 +60,18 @@ export declare function findMessages(conversationId: string, options: {
35
60
  messageId: string;
36
61
  })[];
37
62
  attachments: {
63
+ path: string;
38
64
  type: string;
39
65
  name: string;
40
66
  id: string;
67
+ size: number | null;
68
+ uploadedAt: Date | null;
69
+ uploadStatus: import(".prisma/client").$Enums.UploadStatus;
70
+ thumbnailId: string | null;
71
+ thumbnail: {
72
+ path: string;
73
+ id: string;
74
+ } | null;
41
75
  }[];
42
76
  sender: {
43
77
  id: string;
@@ -49,7 +83,7 @@ export declare function findMessages(conversationId: string, options: {
49
83
  };
50
84
  } & {
51
85
  status: import(".prisma/client").$Enums.JobStatus | null;
52
- meta: import("@prisma/client/runtime/library.js").JsonValue | null;
86
+ meta: Prisma.JsonValue | null;
53
87
  id: string;
54
88
  createdAt: Date;
55
89
  conversationId: string;
@@ -58,10 +92,10 @@ export declare function findMessages(conversationId: string, options: {
58
92
  runJobId: string | null;
59
93
  })[]>;
60
94
  /** @returns Memberships for mentioned users. */
61
- export declare function findMentionedMemberships(conversationId: string, userIds: string[]): import(".prisma/client").Prisma.PrismaPromise<{
95
+ export declare function findMentionedMemberships(conversationId: string, userIds: string[]): Prisma.PrismaPromise<{
62
96
  id: string;
63
- role: import(".prisma/client").$Enums.ConversationRole;
64
97
  userId: string;
98
+ role: import(".prisma/client").$Enums.ConversationRole;
65
99
  conversationId: string;
66
100
  joinedAt: Date;
67
101
  hiddenAt: Date | null;
@@ -69,7 +103,7 @@ export declare function findMentionedMemberships(conversationId: string, userIds
69
103
  lastViewedMentionAt: Date | null;
70
104
  }[]>;
71
105
  /** @returns Message by ID with sender. */
72
- export declare function findMessageById(messageId: string): import(".prisma/client").Prisma.Prisma__MessageClient<({
106
+ export declare function findMessageById(messageId: string): Prisma.Prisma__MessageClient<({
73
107
  sender: {
74
108
  id: string;
75
109
  username: string;
@@ -80,7 +114,7 @@ export declare function findMessageById(messageId: string): import(".prisma/clie
80
114
  };
81
115
  } & {
82
116
  status: import(".prisma/client").$Enums.JobStatus | null;
83
- meta: import("@prisma/client/runtime/library.js").JsonValue | null;
117
+ meta: Prisma.JsonValue | null;
84
118
  id: string;
85
119
  createdAt: Date;
86
120
  conversationId: string;
@@ -95,14 +129,14 @@ export declare function findMessageById(messageId: string): import(".prisma/clie
95
129
  };
96
130
  }>;
97
131
  /** @returns Message by ID with minimal sender. */
98
- export declare function findMessageByIdMinimal(messageId: string): import(".prisma/client").Prisma.Prisma__MessageClient<({
132
+ export declare function findMessageByIdMinimal(messageId: string): Prisma.Prisma__MessageClient<({
99
133
  sender: {
100
134
  id: string;
101
135
  username: string;
102
136
  };
103
137
  } & {
104
138
  status: import(".prisma/client").$Enums.JobStatus | null;
105
- meta: import("@prisma/client/runtime/library.js").JsonValue | null;
139
+ meta: Prisma.JsonValue | null;
106
140
  id: string;
107
141
  createdAt: Date;
108
142
  conversationId: string;
@@ -117,7 +151,7 @@ export declare function findMessageByIdMinimal(messageId: string): import(".pris
117
151
  };
118
152
  }>;
119
153
  /** Count messages in conversation after date, excluding sender's own. */
120
- export declare function countUnreadMessages(conversationId: string, userId: string, after?: Date): import(".prisma/client").Prisma.PrismaPromise<number>;
154
+ export declare function countUnreadMessages(conversationId: string, userId: string, after?: Date): Prisma.PrismaPromise<number>;
121
155
  /** Count mentions of user in conversation after date. */
122
- export declare function countUnreadMentions(conversationId: string, userId: string, after?: Date): import(".prisma/client").Prisma.PrismaPromise<number>;
156
+ export declare function countUnreadMentions(conversationId: string, userId: string, after?: Date): Prisma.PrismaPromise<number>;
123
157
  //# sourceMappingURL=message.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"/","sources":["models/message.ts"],"names":[],"mappings":"AAqDA,oDAAoD;AACpD,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;GAOhF;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAC1B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE;IACP,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAaF;AAED,gDAAgD;AAChD,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EAAE;;;;;;;;;KAQlB;AAED,0CAA0C;AAC1C,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;GAShD;AAED,kDAAkD;AAClD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;GASvD;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,IAAI,yDASb;AAED,yDAAyD;AACzD,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,IAAI,yDAYb"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"/","sources":["models/message.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;CAUQ,CAAC;AA8CvC,oDAAoD;AACpD,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;GAOhF;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAC1B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE;IACP,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAaF;AAED,gDAAgD;AAChD,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EAAE;;;;;;;;;KAQlB;AAED,0CAA0C;AAC1C,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;GAShD;AAED,kDAAkD;AAClD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;GASvD;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,IAAI,gCASb;AAED,yDAAyD;AACzD,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,IAAI,gCAYb"}
@@ -1,16 +1,25 @@
1
- /**
2
- * Message model – messages, attachments, mentions, unread counts.
3
- */
4
1
 
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]="ee83e4b5-6fa2-5533-b1fe-2d23d36519d1")}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]="1e1e6caf-dc79-5d78-a309-1301edb60f78")}catch(e){}}();
6
3
  import { prisma } from "../lib/prisma.js";
4
+ /**
5
+ * Canonical shape for File rows surfaced as message attachments.
6
+ * Use this everywhere a message (list, send, update, suggestion broadcast)
7
+ * exposes attached files so the wire shape stays in sync.
8
+ */
9
+ export const messageFileSelect = {
10
+ id: true,
11
+ name: true,
12
+ type: true,
13
+ size: true,
14
+ path: true,
15
+ uploadedAt: true,
16
+ uploadStatus: true,
17
+ thumbnailId: true,
18
+ thumbnail: { select: { id: true, path: true } },
19
+ };
7
20
  const messageInclude = {
8
21
  attachments: {
9
- select: {
10
- id: true,
11
- name: true,
12
- type: true,
13
- },
22
+ select: messageFileSelect,
14
23
  },
15
24
  sender: {
16
25
  select: {
@@ -128,4 +137,4 @@ export function countUnreadMentions(conversationId, userId, after) {
128
137
  });
129
138
  }
130
139
  //# sourceMappingURL=message.js.map
131
- //# debugId=ee83e4b5-6fa2-5533-b1fe-2d23d36519d1
140
+ //# debugId=1e1e6caf-dc79-5d78-a309-1301edb60f78
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","sources":["models/message.ts"],"sourceRoot":"/","sourcesContent":["/**\n * Message model – messages, attachments, mentions, unread counts.\n */\nimport { prisma } from \"../lib/prisma.js\";\n\nconst messageInclude = {\n attachments: {\n select: {\n id: true,\n name: true,\n type: true,\n },\n },\n sender: {\n select: {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n profilePicture: true,\n },\n },\n },\n },\n mentions: {\n include: {\n user: {\n select: {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n },\n },\n },\n },\n },\n },\n};\n\nconst senderSelect = {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n profilePicture: true,\n },\n },\n};\n\n/** @returns User's membership in a conversation. */\nexport function findConversationMembership(conversationId: string, userId: string) {\n return prisma.conversationMember.findFirst({\n where: {\n conversationId,\n userId,\n },\n });\n}\n\n/** @returns Messages in conversation with cursor pagination. */\nexport function findMessages(\n conversationId: string,\n options: {\n cursor?: Date;\n limit: number;\n }\n) {\n return prisma.message.findMany({\n where: {\n conversationId,\n ...(options.cursor && {\n createdAt: { lt: options.cursor },\n }),\n },\n include: messageInclude,\n orderBy: { createdAt: \"desc\" as const },\n take: options.limit + 1,\n });\n}\n\n/** @returns Memberships for mentioned users. */\nexport function findMentionedMemberships(\n conversationId: string,\n userIds: string[]\n) {\n return prisma.conversationMember.findMany({\n where: {\n conversationId,\n userId: { in: userIds },\n },\n });\n}\n\n/** @returns Message by ID with sender. */\nexport function findMessageById(messageId: string) {\n return prisma.message.findUnique({\n where: { id: messageId },\n include: {\n sender: {\n select: senderSelect,\n },\n },\n });\n}\n\n/** @returns Message by ID with minimal sender. */\nexport function findMessageByIdMinimal(messageId: string) {\n return prisma.message.findUnique({\n where: { id: messageId },\n include: {\n sender: {\n select: { id: true, username: true },\n },\n },\n });\n}\n\n/** Count messages in conversation after date, excluding sender's own. */\nexport function countUnreadMessages(\n conversationId: string,\n userId: string,\n after?: Date\n) {\n return prisma.message.count({\n where: {\n conversationId,\n senderId: { not: userId },\n ...(after && { createdAt: { gt: after } }),\n },\n });\n}\n\n/** Count mentions of user in conversation after date. */\nexport function countUnreadMentions(\n conversationId: string,\n userId: string,\n after?: Date\n) {\n return prisma.mention.count({\n where: {\n userId,\n message: {\n conversationId,\n senderId: { not: userId },\n ...(after && { createdAt: { gt: after } }),\n },\n },\n });\n}\n"],"names":[],"mappings":"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","debug_id":"ee83e4b5-6fa2-5533-b1fe-2d23d36519d1"}
1
+ {"version":3,"file":"message.js","sources":["models/message.ts"],"sourceRoot":"/","sourcesContent":["/**\n * Message model – messages, attachments, mentions, unread counts.\n */\nimport type { Prisma } from \"@prisma/client\";\nimport { prisma } from \"../lib/prisma.js\";\n\n/**\n * Canonical shape for File rows surfaced as message attachments.\n * Use this everywhere a message (list, send, update, suggestion broadcast)\n * exposes attached files so the wire shape stays in sync.\n */\nexport const messageFileSelect = {\n id: true,\n name: true,\n type: true,\n size: true,\n path: true,\n uploadedAt: true,\n uploadStatus: true,\n thumbnailId: true,\n thumbnail: { select: { id: true, path: true } },\n} as const satisfies Prisma.FileSelect;\n\nconst messageInclude = {\n attachments: {\n select: messageFileSelect,\n },\n sender: {\n select: {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n profilePicture: true,\n },\n },\n },\n },\n mentions: {\n include: {\n user: {\n select: {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n },\n },\n },\n },\n },\n },\n};\n\nconst senderSelect = {\n id: true,\n username: true,\n profile: {\n select: {\n displayName: true,\n profilePicture: true,\n },\n },\n};\n\n/** @returns User's membership in a conversation. */\nexport function findConversationMembership(conversationId: string, userId: string) {\n return prisma.conversationMember.findFirst({\n where: {\n conversationId,\n userId,\n },\n });\n}\n\n/** @returns Messages in conversation with cursor pagination. */\nexport function findMessages(\n conversationId: string,\n options: {\n cursor?: Date;\n limit: number;\n }\n) {\n return prisma.message.findMany({\n where: {\n conversationId,\n ...(options.cursor && {\n createdAt: { lt: options.cursor },\n }),\n },\n include: messageInclude,\n orderBy: { createdAt: \"desc\" as const },\n take: options.limit + 1,\n });\n}\n\n/** @returns Memberships for mentioned users. */\nexport function findMentionedMemberships(\n conversationId: string,\n userIds: string[]\n) {\n return prisma.conversationMember.findMany({\n where: {\n conversationId,\n userId: { in: userIds },\n },\n });\n}\n\n/** @returns Message by ID with sender. */\nexport function findMessageById(messageId: string) {\n return prisma.message.findUnique({\n where: { id: messageId },\n include: {\n sender: {\n select: senderSelect,\n },\n },\n });\n}\n\n/** @returns Message by ID with minimal sender. */\nexport function findMessageByIdMinimal(messageId: string) {\n return prisma.message.findUnique({\n where: { id: messageId },\n include: {\n sender: {\n select: { id: true, username: true },\n },\n },\n });\n}\n\n/** Count messages in conversation after date, excluding sender's own. */\nexport function countUnreadMessages(\n conversationId: string,\n userId: string,\n after?: Date\n) {\n return prisma.message.count({\n where: {\n conversationId,\n senderId: { not: userId },\n ...(after && { createdAt: { gt: after } }),\n },\n });\n}\n\n/** Count mentions of user in conversation after date. */\nexport function countUnreadMentions(\n conversationId: string,\n userId: string,\n after?: Date\n) {\n return prisma.mention.count({\n where: {\n userId,\n message: {\n conversationId,\n senderId: { not: userId },\n ...(after && { createdAt: { gt: after } }),\n },\n },\n });\n}\n"],"names":[],"mappings":"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","debug_id":"1e1e6caf-dc79-5d78-a309-1301edb60f78"}
@@ -7,6 +7,7 @@ export declare function findClassWithStudent(classId: string, studentId: string)
7
7
  color: string | null;
8
8
  section: string;
9
9
  syllabus: string | null;
10
+ departmentId: string | null;
10
11
  } | null, null, import("@prisma/client/runtime/library.js").DefaultArgs, {
11
12
  datasources: {
12
13
  db: {
@@ -86,8 +87,8 @@ export declare function findNewtonChatByIdAndMember(newtonChatId: string, userId
86
87
  /** @returns Conversation members for given user IDs. */
87
88
  export declare function findConversationMembersByUserIds(conversationId: string, userIds: string[]): import(".prisma/client").Prisma.PrismaPromise<{
88
89
  id: string;
89
- role: import(".prisma/client").$Enums.ConversationRole;
90
90
  userId: string;
91
+ role: import(".prisma/client").$Enums.ConversationRole;
91
92
  conversationId: string;
92
93
  joinedAt: Date;
93
94
  hiddenAt: Date | null;
@@ -1 +1 @@
1
- {"version":3,"file":"newtonChat.d.ts","sourceRoot":"/","sources":["models/newtonChat.ts"],"names":[],"mappings":"AAKA,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;GAOtE;AAED,sDAAsD;AACtD,wBAAgB,oCAAoC,CAClD,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;GAQlB;AAED,kFAAkF;AAClF,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyBf;AAED,wDAAwD;AACxD,wBAAgB,gCAAgC,CAC9C,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EAAE;;;;;;;;;KAQlB"}
1
+ {"version":3,"file":"newtonChat.d.ts","sourceRoot":"/","sources":["models/newtonChat.ts"],"names":[],"mappings":"AAKA,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;GAOtE;AAED,sDAAsD;AACtD,wBAAgB,oCAAoC,CAClD,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;GAQlB;AAED,kFAAkF;AAClF,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyBf;AAED,wDAAwD;AACxD,wBAAgB,gCAAgC,CAC9C,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EAAE;;;;;;;;;KAQlB"}