@studious-lms/server 1.9.0 → 1.12.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 (163) hide show
  1. package/.env.example +3 -0
  2. package/dist/index.js +40 -4
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/config/cors.d.ts.map +1 -1
  5. package/dist/lib/config/cors.js +7 -2
  6. package/dist/lib/config/cors.js.map +1 -1
  7. package/dist/lib/config/env.d.ts +8 -0
  8. package/dist/lib/config/env.d.ts.map +1 -1
  9. package/dist/lib/config/env.js +5 -2
  10. package/dist/lib/config/env.js.map +1 -1
  11. package/dist/lib/pusher.d.ts +2 -1
  12. package/dist/lib/pusher.d.ts.map +1 -1
  13. package/dist/lib/pusher.js +4 -3
  14. package/dist/lib/pusher.js.map +1 -1
  15. package/dist/models/agenda.d.ts +6 -0
  16. package/dist/models/agenda.d.ts.map +1 -1
  17. package/dist/models/announcement.d.ts +3 -0
  18. package/dist/models/announcement.d.ts.map +1 -1
  19. package/dist/models/assignment.d.ts +61 -0
  20. package/dist/models/assignment.d.ts.map +1 -1
  21. package/dist/models/auth.d.ts +6 -0
  22. package/dist/models/auth.d.ts.map +1 -1
  23. package/dist/models/class.d.ts +18 -0
  24. package/dist/models/class.d.ts.map +1 -1
  25. package/dist/models/class.js +5 -2
  26. package/dist/models/class.js.map +1 -1
  27. package/dist/models/comment.d.ts +6 -0
  28. package/dist/models/comment.d.ts.map +1 -1
  29. package/dist/models/event.d.ts +12 -0
  30. package/dist/models/event.d.ts.map +1 -1
  31. package/dist/models/file.d.ts +38 -0
  32. package/dist/models/file.d.ts.map +1 -1
  33. package/dist/models/folder.d.ts +6 -0
  34. package/dist/models/folder.d.ts.map +1 -1
  35. package/dist/models/labChat.d.ts +6 -0
  36. package/dist/models/labChat.d.ts.map +1 -1
  37. package/dist/models/newtonChat.d.ts +3 -0
  38. package/dist/models/newtonChat.d.ts.map +1 -1
  39. package/dist/models/school.d.ts +3 -0
  40. package/dist/models/school.d.ts.map +1 -1
  41. package/dist/models/section.d.ts +3 -0
  42. package/dist/models/section.d.ts.map +1 -1
  43. package/dist/models/worksheet.d.ts +58 -0
  44. package/dist/models/worksheet.d.ts.map +1 -1
  45. package/dist/models/worksheet.js +26 -2
  46. package/dist/models/worksheet.js.map +1 -1
  47. package/dist/routers/_app.d.ts +6400 -4078
  48. package/dist/routers/_app.d.ts.map +1 -1
  49. package/dist/routers/_app.js +6 -2
  50. package/dist/routers/_app.js.map +1 -1
  51. package/dist/routers/admin.d.ts +190 -0
  52. package/dist/routers/admin.d.ts.map +1 -0
  53. package/dist/routers/admin.js +50 -0
  54. package/dist/routers/admin.js.map +1 -0
  55. package/dist/routers/agenda.d.ts +6 -0
  56. package/dist/routers/agenda.d.ts.map +1 -1
  57. package/dist/routers/announcement.d.ts +2 -0
  58. package/dist/routers/announcement.d.ts.map +1 -1
  59. package/dist/routers/assignment.d.ts +50 -0
  60. package/dist/routers/assignment.d.ts.map +1 -1
  61. package/dist/routers/class.d.ts +31 -0
  62. package/dist/routers/class.d.ts.map +1 -1
  63. package/dist/routers/class.js +5 -2
  64. package/dist/routers/class.js.map +1 -1
  65. package/dist/routers/comment.d.ts +2 -0
  66. package/dist/routers/comment.d.ts.map +1 -1
  67. package/dist/routers/discussion.d.ts +823 -0
  68. package/dist/routers/discussion.d.ts.map +1 -0
  69. package/dist/routers/discussion.js +151 -0
  70. package/dist/routers/discussion.js.map +1 -0
  71. package/dist/routers/event.d.ts +3 -0
  72. package/dist/routers/event.d.ts.map +1 -1
  73. package/dist/routers/file.d.ts +4 -0
  74. package/dist/routers/file.d.ts.map +1 -1
  75. package/dist/routers/school.d.ts +6 -0
  76. package/dist/routers/school.d.ts.map +1 -1
  77. package/dist/routers/studentProgress.d.ts +45 -0
  78. package/dist/routers/studentProgress.d.ts.map +1 -1
  79. package/dist/routers/studentProgress.js +12 -3
  80. package/dist/routers/studentProgress.js.map +1 -1
  81. package/dist/routers/worksheet.d.ts +3 -0
  82. package/dist/routers/worksheet.d.ts.map +1 -1
  83. package/dist/seedDatabase.d.ts.map +1 -1
  84. package/dist/seedDatabase.js +1490 -1307
  85. package/dist/seedDatabase.js.map +1 -1
  86. package/dist/services/adminInstitution.d.ts +102 -0
  87. package/dist/services/adminInstitution.d.ts.map +1 -0
  88. package/dist/services/adminInstitution.js +117 -0
  89. package/dist/services/adminInstitution.js.map +1 -0
  90. package/dist/services/adminRunJob.d.ts +45 -0
  91. package/dist/services/adminRunJob.d.ts.map +1 -0
  92. package/dist/services/adminRunJob.js +41 -0
  93. package/dist/services/adminRunJob.js.map +1 -0
  94. package/dist/services/agenda.d.ts +6 -0
  95. package/dist/services/agenda.d.ts.map +1 -1
  96. package/dist/services/assignment.d.ts +50 -0
  97. package/dist/services/assignment.d.ts.map +1 -1
  98. package/dist/services/assignment.js +8 -3
  99. package/dist/services/assignment.js.map +1 -1
  100. package/dist/services/class.d.ts +31 -0
  101. package/dist/services/class.d.ts.map +1 -1
  102. package/dist/services/class.js +14 -2
  103. package/dist/services/class.js.map +1 -1
  104. package/dist/services/comment.d.ts +2 -0
  105. package/dist/services/comment.d.ts.map +1 -1
  106. package/dist/services/discussion.d.ts +762 -0
  107. package/dist/services/discussion.d.ts.map +1 -0
  108. package/dist/services/discussion.js +625 -0
  109. package/dist/services/discussion.js.map +1 -0
  110. package/dist/services/event.d.ts +3 -0
  111. package/dist/services/event.d.ts.map +1 -1
  112. package/dist/services/file.d.ts +8 -0
  113. package/dist/services/file.d.ts.map +1 -1
  114. package/dist/services/school.d.ts +6 -0
  115. package/dist/services/school.d.ts.map +1 -1
  116. package/dist/services/studentProgress.d.ts +94 -0
  117. package/dist/services/studentProgress.d.ts.map +1 -1
  118. package/dist/services/studentProgress.js +116 -3
  119. package/dist/services/studentProgress.js.map +1 -1
  120. package/dist/services/studentProgressInferenceCache.d.ts +16 -0
  121. package/dist/services/studentProgressInferenceCache.d.ts.map +1 -0
  122. package/dist/services/studentProgressInferenceCache.js +43 -0
  123. package/dist/services/studentProgressInferenceCache.js.map +1 -0
  124. package/dist/services/worksheet.d.ts +3 -0
  125. package/dist/services/worksheet.d.ts.map +1 -1
  126. package/dist/services/worksheet.js +5 -5
  127. package/dist/services/worksheet.js.map +1 -1
  128. package/dist/trpc.d.ts +12 -0
  129. package/dist/trpc.d.ts.map +1 -1
  130. package/dist/trpc.js +16 -3
  131. package/dist/trpc.js.map +1 -1
  132. package/dist/utils/adminPanelAccess.d.ts +8 -0
  133. package/dist/utils/adminPanelAccess.d.ts.map +1 -0
  134. package/dist/utils/adminPanelAccess.js +44 -0
  135. package/dist/utils/adminPanelAccess.js.map +1 -0
  136. package/package.json +1 -1
  137. package/prisma/migrations/20260510183000_add_discussions/migration.sql +151 -0
  138. package/prisma/schema.prisma +97 -0
  139. package/src/index.ts +39 -2
  140. package/src/lib/config/cors.ts +5 -0
  141. package/src/lib/config/env.ts +3 -0
  142. package/src/lib/pusher.ts +2 -1
  143. package/src/models/class.ts +3 -0
  144. package/src/models/worksheet.ts +28 -0
  145. package/src/routers/_app.ts +4 -0
  146. package/src/routers/admin.ts +70 -0
  147. package/src/routers/class.ts +3 -0
  148. package/src/routers/discussion.ts +205 -0
  149. package/src/routers/studentProgress.ts +21 -0
  150. package/src/seedDatabase.ts +1713 -1361
  151. package/src/services/adminInstitution.ts +140 -0
  152. package/src/services/adminRunJob.ts +46 -0
  153. package/src/services/assignment.ts +11 -1
  154. package/src/services/class.ts +18 -0
  155. package/src/services/discussion.ts +701 -0
  156. package/src/services/studentProgress.ts +274 -11
  157. package/src/services/studentProgressInferenceCache.ts +64 -0
  158. package/src/services/worksheet.ts +4 -2
  159. package/src/trpc.ts +15 -0
  160. package/src/utils/adminPanelAccess.ts +46 -0
  161. package/tests/integration/routers/discussion.test.ts +253 -0
  162. package/tests/unit/services/discussion.test.ts +356 -0
  163. package/tests/unit/services/studentProgress.test.ts +168 -2
@@ -0,0 +1,823 @@
1
+ import { z } from "zod";
2
+ export declare const discussionRouter: import("@trpc/server").TRPCBuiltRouter<{
3
+ ctx: import("../trpc.js").Context;
4
+ meta: object;
5
+ errorShape: {
6
+ data: {
7
+ zodError: z.typeToFlattenedError<any, string> | null;
8
+ prismaError: import("../utils/prismaErrorHandler.js").PrismaErrorInfo | null;
9
+ code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
10
+ httpStatus: number;
11
+ path?: string;
12
+ stack?: string;
13
+ };
14
+ message: string;
15
+ code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
16
+ };
17
+ transformer: false;
18
+ }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
19
+ list: import("@trpc/server").TRPCQueryProcedure<{
20
+ input: {
21
+ classId: string;
22
+ type?: "DISCUSSION" | "QUESTION" | "ANNOUNCEMENT" | undefined;
23
+ sort?: "recent" | "activity" | "top" | undefined;
24
+ search?: string | undefined;
25
+ cursor?: string | undefined;
26
+ tagId?: string | undefined;
27
+ limit?: number | undefined;
28
+ };
29
+ output: {
30
+ items: {
31
+ hasAcceptedAnswer: boolean;
32
+ id: string;
33
+ classId: string;
34
+ authorId: string;
35
+ title: string;
36
+ body: string;
37
+ type: import(".prisma/client").$Enums.DiscussionType;
38
+ isPinned: boolean;
39
+ isLocked: boolean;
40
+ allowReplies: boolean;
41
+ createdAt: Date;
42
+ updatedAt: Date;
43
+ lastActivityAt: Date;
44
+ author: {
45
+ id: string;
46
+ username: string;
47
+ profile: {
48
+ displayName: string | null;
49
+ profilePicture: string | null;
50
+ profilePictureThumbnail: string | null;
51
+ } | null;
52
+ };
53
+ attachments: {
54
+ path: string;
55
+ type: string;
56
+ name: string;
57
+ id: string;
58
+ size: number | null;
59
+ uploadedAt: Date | null;
60
+ uploadStatus: import(".prisma/client").$Enums.UploadStatus;
61
+ thumbnailId: string | null;
62
+ thumbnail: {
63
+ path: string;
64
+ id: string;
65
+ } | null;
66
+ }[];
67
+ tags: {
68
+ name: string;
69
+ id: string;
70
+ color: string;
71
+ }[];
72
+ replyCount: number;
73
+ reactions: {
74
+ counts: {
75
+ THUMBSUP: number;
76
+ CELEBRATE: number;
77
+ CARE: number;
78
+ HEART: number;
79
+ IDEA: number;
80
+ HAPPY: number;
81
+ };
82
+ userReaction: import(".prisma/client").$Enums.ReactionType | null;
83
+ total: number;
84
+ };
85
+ unreadCount: number;
86
+ }[];
87
+ nextCursor: string | undefined;
88
+ };
89
+ meta: object;
90
+ }>;
91
+ get: import("@trpc/server").TRPCQueryProcedure<{
92
+ input: {
93
+ discussionId: string;
94
+ };
95
+ output: {
96
+ discussion: {
97
+ id: string;
98
+ classId: string;
99
+ authorId: string;
100
+ title: string;
101
+ body: string;
102
+ type: import(".prisma/client").$Enums.DiscussionType;
103
+ isPinned: boolean;
104
+ isLocked: boolean;
105
+ allowReplies: boolean;
106
+ createdAt: Date;
107
+ updatedAt: Date;
108
+ lastActivityAt: Date;
109
+ author: {
110
+ id: string;
111
+ username: string;
112
+ profile: {
113
+ displayName: string | null;
114
+ profilePicture: string | null;
115
+ profilePictureThumbnail: string | null;
116
+ } | null;
117
+ };
118
+ attachments: {
119
+ path: string;
120
+ type: string;
121
+ name: string;
122
+ id: string;
123
+ size: number | null;
124
+ uploadedAt: Date | null;
125
+ uploadStatus: import(".prisma/client").$Enums.UploadStatus;
126
+ thumbnailId: string | null;
127
+ thumbnail: {
128
+ path: string;
129
+ id: string;
130
+ } | null;
131
+ }[];
132
+ tags: {
133
+ name: string;
134
+ id: string;
135
+ color: string;
136
+ }[];
137
+ replyCount: number;
138
+ hasAcceptedAnswer: boolean;
139
+ reactions: {
140
+ counts: {
141
+ THUMBSUP: number;
142
+ CELEBRATE: number;
143
+ CARE: number;
144
+ HEART: number;
145
+ IDEA: number;
146
+ HAPPY: number;
147
+ };
148
+ userReaction: import(".prisma/client").$Enums.ReactionType | null;
149
+ total: number;
150
+ };
151
+ unreadCount: number;
152
+ };
153
+ replies: import("../services/discussion.js").DiscussionReplyTree[];
154
+ myReaction: import(".prisma/client").$Enums.ReactionType | null;
155
+ canEdit: boolean;
156
+ canPin: boolean;
157
+ canLock: boolean;
158
+ canDelete: boolean;
159
+ canReply: boolean;
160
+ };
161
+ meta: object;
162
+ }>;
163
+ create: import("@trpc/server").TRPCMutationProcedure<{
164
+ input: {
165
+ classId: string;
166
+ title: string;
167
+ body: string;
168
+ type?: "DISCUSSION" | "QUESTION" | "ANNOUNCEMENT" | undefined;
169
+ tagIds?: string[] | undefined;
170
+ attachmentIds?: string[] | undefined;
171
+ };
172
+ output: {
173
+ discussion: {
174
+ id: string;
175
+ classId: string;
176
+ authorId: string;
177
+ title: string;
178
+ body: string;
179
+ type: import(".prisma/client").$Enums.DiscussionType;
180
+ isPinned: boolean;
181
+ isLocked: boolean;
182
+ allowReplies: boolean;
183
+ createdAt: Date;
184
+ updatedAt: Date;
185
+ lastActivityAt: Date;
186
+ author: {
187
+ id: string;
188
+ username: string;
189
+ profile: {
190
+ displayName: string | null;
191
+ profilePicture: string | null;
192
+ profilePictureThumbnail: string | null;
193
+ } | null;
194
+ };
195
+ attachments: {
196
+ path: string;
197
+ type: string;
198
+ name: string;
199
+ id: string;
200
+ size: number | null;
201
+ uploadedAt: Date | null;
202
+ uploadStatus: import(".prisma/client").$Enums.UploadStatus;
203
+ thumbnailId: string | null;
204
+ thumbnail: {
205
+ path: string;
206
+ id: string;
207
+ } | null;
208
+ }[];
209
+ tags: {
210
+ name: string;
211
+ id: string;
212
+ color: string;
213
+ }[];
214
+ replyCount: number;
215
+ hasAcceptedAnswer: boolean;
216
+ reactions: {
217
+ counts: {
218
+ THUMBSUP: number;
219
+ CELEBRATE: number;
220
+ CARE: number;
221
+ HEART: number;
222
+ IDEA: number;
223
+ HAPPY: number;
224
+ };
225
+ userReaction: import(".prisma/client").$Enums.ReactionType | null;
226
+ total: number;
227
+ };
228
+ unreadCount: number;
229
+ };
230
+ };
231
+ meta: object;
232
+ }>;
233
+ getUploadUrls: import("@trpc/server").TRPCMutationProcedure<{
234
+ input: {
235
+ classId: string;
236
+ files: {
237
+ type: string;
238
+ name: string;
239
+ size: number;
240
+ }[];
241
+ };
242
+ output: {
243
+ uploadFiles: import("../lib/fileUpload.js").DirectUploadFile[];
244
+ };
245
+ meta: object;
246
+ }>;
247
+ confirmUpload: import("@trpc/server").TRPCMutationProcedure<{
248
+ input: {
249
+ fileId: string;
250
+ uploadSuccess: boolean;
251
+ errorMessage?: string | undefined;
252
+ };
253
+ output: {
254
+ success: boolean;
255
+ };
256
+ meta: object;
257
+ }>;
258
+ update: import("@trpc/server").TRPCMutationProcedure<{
259
+ input: {
260
+ discussionId: string;
261
+ type?: "DISCUSSION" | "QUESTION" | "ANNOUNCEMENT" | undefined;
262
+ title?: string | undefined;
263
+ body?: string | undefined;
264
+ allowReplies?: boolean | undefined;
265
+ tagIds?: string[] | undefined;
266
+ };
267
+ output: {
268
+ discussion: {
269
+ id: string;
270
+ classId: string;
271
+ authorId: string;
272
+ title: string;
273
+ body: string;
274
+ type: import(".prisma/client").$Enums.DiscussionType;
275
+ isPinned: boolean;
276
+ isLocked: boolean;
277
+ allowReplies: boolean;
278
+ createdAt: Date;
279
+ updatedAt: Date;
280
+ lastActivityAt: Date;
281
+ author: {
282
+ id: string;
283
+ username: string;
284
+ profile: {
285
+ displayName: string | null;
286
+ profilePicture: string | null;
287
+ profilePictureThumbnail: string | null;
288
+ } | null;
289
+ };
290
+ attachments: {
291
+ path: string;
292
+ type: string;
293
+ name: string;
294
+ id: string;
295
+ size: number | null;
296
+ uploadedAt: Date | null;
297
+ uploadStatus: import(".prisma/client").$Enums.UploadStatus;
298
+ thumbnailId: string | null;
299
+ thumbnail: {
300
+ path: string;
301
+ id: string;
302
+ } | null;
303
+ }[];
304
+ tags: {
305
+ name: string;
306
+ id: string;
307
+ color: string;
308
+ }[];
309
+ replyCount: number;
310
+ hasAcceptedAnswer: boolean;
311
+ reactions: {
312
+ counts: {
313
+ THUMBSUP: number;
314
+ CELEBRATE: number;
315
+ CARE: number;
316
+ HEART: number;
317
+ IDEA: number;
318
+ HAPPY: number;
319
+ };
320
+ userReaction: import(".prisma/client").$Enums.ReactionType | null;
321
+ total: number;
322
+ };
323
+ unreadCount: number;
324
+ };
325
+ };
326
+ meta: object;
327
+ }>;
328
+ delete: import("@trpc/server").TRPCMutationProcedure<{
329
+ input: {
330
+ discussionId: string;
331
+ };
332
+ output: {
333
+ success: boolean;
334
+ };
335
+ meta: object;
336
+ }>;
337
+ reply: import("@trpc/server").TRPCMutationProcedure<{
338
+ input: {
339
+ discussionId: string;
340
+ body: string;
341
+ attachmentIds?: string[] | undefined;
342
+ parentReplyId?: string | undefined;
343
+ };
344
+ output: {
345
+ reply: {
346
+ id: string;
347
+ discussionId: string;
348
+ authorId: string;
349
+ parentId: string | null;
350
+ body: string;
351
+ deletedAt: Date | null;
352
+ isAcceptedAnswer: boolean;
353
+ createdAt: Date;
354
+ modifiedAt: Date | null;
355
+ author: {
356
+ id: string;
357
+ username: string;
358
+ profile: {
359
+ displayName: string | null;
360
+ profilePicture: string | null;
361
+ profilePictureThumbnail: string | null;
362
+ } | null;
363
+ };
364
+ attachments: {
365
+ path: string;
366
+ type: string;
367
+ name: string;
368
+ id: string;
369
+ size: number | null;
370
+ uploadedAt: Date | null;
371
+ uploadStatus: import(".prisma/client").$Enums.UploadStatus;
372
+ thumbnailId: string | null;
373
+ thumbnail: {
374
+ path: string;
375
+ id: string;
376
+ } | null;
377
+ }[];
378
+ reactions: {
379
+ counts: {
380
+ THUMBSUP: number;
381
+ CELEBRATE: number;
382
+ CARE: number;
383
+ HEART: number;
384
+ IDEA: number;
385
+ HAPPY: number;
386
+ };
387
+ userReaction: import(".prisma/client").$Enums.ReactionType | null;
388
+ total: number;
389
+ };
390
+ };
391
+ };
392
+ meta: object;
393
+ }>;
394
+ updateReply: import("@trpc/server").TRPCMutationProcedure<{
395
+ input: {
396
+ body: string;
397
+ replyId: string;
398
+ attachmentIds?: string[] | undefined;
399
+ };
400
+ output: {
401
+ reply: {
402
+ id: string;
403
+ discussionId: string;
404
+ authorId: string;
405
+ parentId: string | null;
406
+ body: string;
407
+ deletedAt: Date | null;
408
+ isAcceptedAnswer: boolean;
409
+ createdAt: Date;
410
+ modifiedAt: Date | null;
411
+ author: {
412
+ id: string;
413
+ username: string;
414
+ profile: {
415
+ displayName: string | null;
416
+ profilePicture: string | null;
417
+ profilePictureThumbnail: string | null;
418
+ } | null;
419
+ };
420
+ attachments: {
421
+ path: string;
422
+ type: string;
423
+ name: string;
424
+ id: string;
425
+ size: number | null;
426
+ uploadedAt: Date | null;
427
+ uploadStatus: import(".prisma/client").$Enums.UploadStatus;
428
+ thumbnailId: string | null;
429
+ thumbnail: {
430
+ path: string;
431
+ id: string;
432
+ } | null;
433
+ }[];
434
+ reactions: {
435
+ counts: {
436
+ THUMBSUP: number;
437
+ CELEBRATE: number;
438
+ CARE: number;
439
+ HEART: number;
440
+ IDEA: number;
441
+ HAPPY: number;
442
+ };
443
+ userReaction: import(".prisma/client").$Enums.ReactionType | null;
444
+ total: number;
445
+ };
446
+ };
447
+ };
448
+ meta: object;
449
+ }>;
450
+ deleteReply: import("@trpc/server").TRPCMutationProcedure<{
451
+ input: {
452
+ replyId: string;
453
+ };
454
+ output: {
455
+ reply: {
456
+ id: string;
457
+ discussionId: string;
458
+ authorId: string;
459
+ parentId: string | null;
460
+ body: string;
461
+ deletedAt: Date | null;
462
+ isAcceptedAnswer: boolean;
463
+ createdAt: Date;
464
+ modifiedAt: Date | null;
465
+ author: {
466
+ id: string;
467
+ username: string;
468
+ profile: {
469
+ displayName: string | null;
470
+ profilePicture: string | null;
471
+ profilePictureThumbnail: string | null;
472
+ } | null;
473
+ };
474
+ attachments: {
475
+ path: string;
476
+ type: string;
477
+ name: string;
478
+ id: string;
479
+ size: number | null;
480
+ uploadedAt: Date | null;
481
+ uploadStatus: import(".prisma/client").$Enums.UploadStatus;
482
+ thumbnailId: string | null;
483
+ thumbnail: {
484
+ path: string;
485
+ id: string;
486
+ } | null;
487
+ }[];
488
+ reactions: {
489
+ counts: {
490
+ THUMBSUP: number;
491
+ CELEBRATE: number;
492
+ CARE: number;
493
+ HEART: number;
494
+ IDEA: number;
495
+ HAPPY: number;
496
+ };
497
+ userReaction: import(".prisma/client").$Enums.ReactionType | null;
498
+ total: number;
499
+ };
500
+ };
501
+ };
502
+ meta: object;
503
+ }>;
504
+ pin: import("@trpc/server").TRPCMutationProcedure<{
505
+ input: {
506
+ discussionId: string;
507
+ isPinned: boolean;
508
+ };
509
+ output: {
510
+ discussion: {
511
+ id: string;
512
+ classId: string;
513
+ authorId: string;
514
+ title: string;
515
+ body: string;
516
+ type: import(".prisma/client").$Enums.DiscussionType;
517
+ isPinned: boolean;
518
+ isLocked: boolean;
519
+ allowReplies: boolean;
520
+ createdAt: Date;
521
+ updatedAt: Date;
522
+ lastActivityAt: Date;
523
+ author: {
524
+ id: string;
525
+ username: string;
526
+ profile: {
527
+ displayName: string | null;
528
+ profilePicture: string | null;
529
+ profilePictureThumbnail: string | null;
530
+ } | null;
531
+ };
532
+ attachments: {
533
+ path: string;
534
+ type: string;
535
+ name: string;
536
+ id: string;
537
+ size: number | null;
538
+ uploadedAt: Date | null;
539
+ uploadStatus: import(".prisma/client").$Enums.UploadStatus;
540
+ thumbnailId: string | null;
541
+ thumbnail: {
542
+ path: string;
543
+ id: string;
544
+ } | null;
545
+ }[];
546
+ tags: {
547
+ name: string;
548
+ id: string;
549
+ color: string;
550
+ }[];
551
+ replyCount: number;
552
+ hasAcceptedAnswer: boolean;
553
+ reactions: {
554
+ counts: {
555
+ THUMBSUP: number;
556
+ CELEBRATE: number;
557
+ CARE: number;
558
+ HEART: number;
559
+ IDEA: number;
560
+ HAPPY: number;
561
+ };
562
+ userReaction: import(".prisma/client").$Enums.ReactionType | null;
563
+ total: number;
564
+ };
565
+ unreadCount: number;
566
+ };
567
+ };
568
+ meta: object;
569
+ }>;
570
+ lock: import("@trpc/server").TRPCMutationProcedure<{
571
+ input: {
572
+ discussionId: string;
573
+ isLocked: boolean;
574
+ };
575
+ output: {
576
+ discussion: {
577
+ id: string;
578
+ classId: string;
579
+ authorId: string;
580
+ title: string;
581
+ body: string;
582
+ type: import(".prisma/client").$Enums.DiscussionType;
583
+ isPinned: boolean;
584
+ isLocked: boolean;
585
+ allowReplies: boolean;
586
+ createdAt: Date;
587
+ updatedAt: Date;
588
+ lastActivityAt: Date;
589
+ author: {
590
+ id: string;
591
+ username: string;
592
+ profile: {
593
+ displayName: string | null;
594
+ profilePicture: string | null;
595
+ profilePictureThumbnail: string | null;
596
+ } | null;
597
+ };
598
+ attachments: {
599
+ path: string;
600
+ type: string;
601
+ name: string;
602
+ id: string;
603
+ size: number | null;
604
+ uploadedAt: Date | null;
605
+ uploadStatus: import(".prisma/client").$Enums.UploadStatus;
606
+ thumbnailId: string | null;
607
+ thumbnail: {
608
+ path: string;
609
+ id: string;
610
+ } | null;
611
+ }[];
612
+ tags: {
613
+ name: string;
614
+ id: string;
615
+ color: string;
616
+ }[];
617
+ replyCount: number;
618
+ hasAcceptedAnswer: boolean;
619
+ reactions: {
620
+ counts: {
621
+ THUMBSUP: number;
622
+ CELEBRATE: number;
623
+ CARE: number;
624
+ HEART: number;
625
+ IDEA: number;
626
+ HAPPY: number;
627
+ };
628
+ userReaction: import(".prisma/client").$Enums.ReactionType | null;
629
+ total: number;
630
+ };
631
+ unreadCount: number;
632
+ };
633
+ };
634
+ meta: object;
635
+ }>;
636
+ markAcceptedAnswer: import("@trpc/server").TRPCMutationProcedure<{
637
+ input: {
638
+ replyId: string;
639
+ accepted: boolean;
640
+ };
641
+ output: {
642
+ reply: {
643
+ id: string;
644
+ discussionId: string;
645
+ authorId: string;
646
+ parentId: string | null;
647
+ body: string;
648
+ deletedAt: Date | null;
649
+ isAcceptedAnswer: boolean;
650
+ createdAt: Date;
651
+ modifiedAt: Date | null;
652
+ author: {
653
+ id: string;
654
+ username: string;
655
+ profile: {
656
+ displayName: string | null;
657
+ profilePicture: string | null;
658
+ profilePictureThumbnail: string | null;
659
+ } | null;
660
+ };
661
+ attachments: {
662
+ path: string;
663
+ type: string;
664
+ name: string;
665
+ id: string;
666
+ size: number | null;
667
+ uploadedAt: Date | null;
668
+ uploadStatus: import(".prisma/client").$Enums.UploadStatus;
669
+ thumbnailId: string | null;
670
+ thumbnail: {
671
+ path: string;
672
+ id: string;
673
+ } | null;
674
+ }[];
675
+ reactions: {
676
+ counts: {
677
+ THUMBSUP: number;
678
+ CELEBRATE: number;
679
+ CARE: number;
680
+ HEART: number;
681
+ IDEA: number;
682
+ HAPPY: number;
683
+ };
684
+ userReaction: import(".prisma/client").$Enums.ReactionType | null;
685
+ total: number;
686
+ };
687
+ };
688
+ };
689
+ meta: object;
690
+ }>;
691
+ markRead: import("@trpc/server").TRPCMutationProcedure<{
692
+ input: {
693
+ discussionId: string;
694
+ };
695
+ output: {
696
+ userId: string;
697
+ discussionId: string;
698
+ lastReadAt: Date;
699
+ };
700
+ meta: object;
701
+ }>;
702
+ getUnreadCounts: import("@trpc/server").TRPCQueryProcedure<{
703
+ input: {
704
+ classIds: string[];
705
+ };
706
+ output: Record<string, {
707
+ total: number;
708
+ perDiscussion: {
709
+ discussionId: string;
710
+ count: number;
711
+ }[];
712
+ }>;
713
+ meta: object;
714
+ }>;
715
+ reactions: import("@trpc/server").TRPCBuiltRouter<{
716
+ ctx: import("../trpc.js").Context;
717
+ meta: object;
718
+ errorShape: {
719
+ data: {
720
+ zodError: z.typeToFlattenedError<any, string> | null;
721
+ prismaError: import("../utils/prismaErrorHandler.js").PrismaErrorInfo | null;
722
+ code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
723
+ httpStatus: number;
724
+ path?: string;
725
+ stack?: string;
726
+ };
727
+ message: string;
728
+ code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
729
+ };
730
+ transformer: false;
731
+ }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
732
+ toggle: import("@trpc/server").TRPCMutationProcedure<{
733
+ input: {
734
+ type: "THUMBSUP" | "CELEBRATE" | "CARE" | "HEART" | "IDEA" | "HAPPY";
735
+ discussionId?: string | undefined;
736
+ discussionReplyId?: string | undefined;
737
+ };
738
+ output: {
739
+ reaction: null;
740
+ } | {
741
+ reaction: {
742
+ type: import(".prisma/client").$Enums.ReactionType;
743
+ id: string;
744
+ createdAt: Date;
745
+ userId: string;
746
+ announcementId: string | null;
747
+ discussionId: string | null;
748
+ discussionReplyId: string | null;
749
+ commentId: string | null;
750
+ };
751
+ };
752
+ meta: object;
753
+ }>;
754
+ }>>;
755
+ tags: import("@trpc/server").TRPCBuiltRouter<{
756
+ ctx: import("../trpc.js").Context;
757
+ meta: object;
758
+ errorShape: {
759
+ data: {
760
+ zodError: z.typeToFlattenedError<any, string> | null;
761
+ prismaError: import("../utils/prismaErrorHandler.js").PrismaErrorInfo | null;
762
+ code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
763
+ httpStatus: number;
764
+ path?: string;
765
+ stack?: string;
766
+ };
767
+ message: string;
768
+ code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
769
+ };
770
+ transformer: false;
771
+ }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
772
+ list: import("@trpc/server").TRPCQueryProcedure<{
773
+ input: {
774
+ classId: string;
775
+ };
776
+ output: {
777
+ name: string;
778
+ id: string;
779
+ color: string;
780
+ classId: string;
781
+ }[];
782
+ meta: object;
783
+ }>;
784
+ create: import("@trpc/server").TRPCMutationProcedure<{
785
+ input: {
786
+ name: string;
787
+ color: string;
788
+ classId: string;
789
+ };
790
+ output: {
791
+ name: string;
792
+ id: string;
793
+ color: string;
794
+ classId: string;
795
+ };
796
+ meta: object;
797
+ }>;
798
+ update: import("@trpc/server").TRPCMutationProcedure<{
799
+ input: {
800
+ tagId: string;
801
+ name?: string | undefined;
802
+ color?: string | undefined;
803
+ };
804
+ output: {
805
+ name: string;
806
+ id: string;
807
+ color: string;
808
+ classId: string;
809
+ };
810
+ meta: object;
811
+ }>;
812
+ delete: import("@trpc/server").TRPCMutationProcedure<{
813
+ input: {
814
+ tagId: string;
815
+ };
816
+ output: {
817
+ success: boolean;
818
+ };
819
+ meta: object;
820
+ }>;
821
+ }>>;
822
+ }>>;
823
+ //# sourceMappingURL=discussion.d.ts.map