@studious-lms/server 1.13.0 → 1.15.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 (375) hide show
  1. package/.dockerignore +28 -0
  2. package/.env.example +5 -0
  3. package/.github/workflows/deploy.yml +123 -0
  4. package/Dockerfile +54 -0
  5. package/dist/index.js +5 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/instrument.js +3 -3
  8. package/dist/instrument.js.map +1 -1
  9. package/dist/lib/config/cors.d.ts.map +1 -1
  10. package/dist/lib/config/cors.js +31 -11
  11. package/dist/lib/config/cors.js.map +1 -1
  12. package/dist/lib/config/env.d.ts +17 -0
  13. package/dist/lib/config/env.d.ts.map +1 -1
  14. package/dist/lib/config/env.js +8 -2
  15. package/dist/lib/config/env.js.map +1 -1
  16. package/dist/lib/googleCloudStorage.d.ts +10 -0
  17. package/dist/lib/googleCloudStorage.d.ts.map +1 -1
  18. package/dist/lib/googleCloudStorage.js +22 -2
  19. package/dist/lib/googleCloudStorage.js.map +1 -1
  20. package/dist/lib/inferDocumentFormat.d.ts +10 -0
  21. package/dist/lib/inferDocumentFormat.d.ts.map +1 -0
  22. package/dist/lib/inferDocumentFormat.js +48 -0
  23. package/dist/lib/inferDocumentFormat.js.map +1 -0
  24. package/dist/lib/legal.d.ts +3 -0
  25. package/dist/lib/legal.d.ts.map +1 -0
  26. package/dist/lib/legal.js +6 -0
  27. package/dist/lib/legal.js.map +1 -0
  28. package/dist/lib/prisma.d.ts +104 -5
  29. package/dist/lib/prisma.d.ts.map +1 -1
  30. package/dist/lib/prisma.js +33 -2
  31. package/dist/lib/prisma.js.map +1 -1
  32. package/dist/models/agenda.d.ts +20 -20
  33. package/dist/models/announcement.d.ts +211 -101
  34. package/dist/models/announcement.d.ts.map +1 -1
  35. package/dist/models/assignment.d.ts +560 -362
  36. package/dist/models/assignment.d.ts.map +1 -1
  37. package/dist/models/attendance.d.ts +197 -71
  38. package/dist/models/attendance.d.ts.map +1 -1
  39. package/dist/models/auth.d.ts +356 -114
  40. package/dist/models/auth.d.ts.map +1 -1
  41. package/dist/models/auth.js +4 -2
  42. package/dist/models/auth.js.map +1 -1
  43. package/dist/models/class.d.ts +327 -201
  44. package/dist/models/class.d.ts.map +1 -1
  45. package/dist/models/class.js +2 -2
  46. package/dist/models/class.js.map +1 -1
  47. package/dist/models/cloudStorage.d.ts +146 -56
  48. package/dist/models/cloudStorage.d.ts.map +1 -1
  49. package/dist/models/comment.d.ts +262 -110
  50. package/dist/models/comment.d.ts.map +1 -1
  51. package/dist/models/conversation.d.ts +206 -80
  52. package/dist/models/conversation.d.ts.map +1 -1
  53. package/dist/models/department.d.ts +196 -70
  54. package/dist/models/department.d.ts.map +1 -1
  55. package/dist/models/event.d.ts +305 -141
  56. package/dist/models/event.d.ts.map +1 -1
  57. package/dist/models/file.d.ts +422 -272
  58. package/dist/models/file.d.ts.map +1 -1
  59. package/dist/models/folder.d.ts +433 -181
  60. package/dist/models/folder.d.ts.map +1 -1
  61. package/dist/models/labChat.d.ts +205 -79
  62. package/dist/models/labChat.d.ts.map +1 -1
  63. package/dist/models/marketing.d.ts +79 -38
  64. package/dist/models/marketing.d.ts.map +1 -1
  65. package/dist/models/marketing.js +12 -4
  66. package/dist/models/marketing.js.map +1 -1
  67. package/dist/models/message.d.ts +97 -43
  68. package/dist/models/message.d.ts.map +1 -1
  69. package/dist/models/newtonChat.d.ts +84 -30
  70. package/dist/models/newtonChat.d.ts.map +1 -1
  71. package/dist/models/notification.d.ts +57 -21
  72. package/dist/models/notification.d.ts.map +1 -1
  73. package/dist/models/school.d.ts +349 -133
  74. package/dist/models/school.d.ts.map +1 -1
  75. package/dist/models/section.d.ts +216 -72
  76. package/dist/models/section.d.ts.map +1 -1
  77. package/dist/models/tag.d.ts +156 -48
  78. package/dist/models/tag.d.ts.map +1 -1
  79. package/dist/models/user.d.ts +82 -28
  80. package/dist/models/user.d.ts.map +1 -1
  81. package/dist/models/worksheet.d.ts +1032 -423
  82. package/dist/models/worksheet.d.ts.map +1 -1
  83. package/dist/models/worksheet.js +8 -2
  84. package/dist/models/worksheet.js.map +1 -1
  85. package/dist/pipelines/aiLabChat.d.ts +7 -9
  86. package/dist/pipelines/aiLabChat.d.ts.map +1 -1
  87. package/dist/pipelines/aiLabChat.js +194 -125
  88. package/dist/pipelines/aiLabChat.js.map +1 -1
  89. package/dist/pipelines/aiLabChatContract.d.ts +233 -389
  90. package/dist/pipelines/aiLabChatContract.d.ts.map +1 -1
  91. package/dist/pipelines/aiLabChatContract.js +54 -70
  92. package/dist/pipelines/aiLabChatContract.js.map +1 -1
  93. package/dist/pipelines/aiNewtonChat.d.ts.map +1 -1
  94. package/dist/pipelines/aiNewtonChat.js +41 -41
  95. package/dist/pipelines/aiNewtonChat.js.map +1 -1
  96. package/dist/pipelines/gradeWorksheet.d.ts +8 -8
  97. package/dist/pipelines/labChatPrompt.d.ts +18 -11
  98. package/dist/pipelines/labChatPrompt.d.ts.map +1 -1
  99. package/dist/pipelines/labChatPrompt.js +93 -75
  100. package/dist/pipelines/labChatPrompt.js.map +1 -1
  101. package/dist/pipelines/pdfToWorksheet.d.ts +1 -1
  102. package/dist/routers/_app.d.ts +2601 -2151
  103. package/dist/routers/_app.d.ts.map +1 -1
  104. package/dist/routers/_app.js +4 -2
  105. package/dist/routers/_app.js.map +1 -1
  106. package/dist/routers/admin.d.ts +13 -13
  107. package/dist/routers/agenda.d.ts +18 -18
  108. package/dist/routers/announcement.d.ts +60 -60
  109. package/dist/routers/assignment.d.ts +393 -383
  110. package/dist/routers/assignment.d.ts.map +1 -1
  111. package/dist/routers/attendance.d.ts +10 -10
  112. package/dist/routers/auth.d.ts +4 -2
  113. package/dist/routers/auth.d.ts.map +1 -1
  114. package/dist/routers/auth.js +15 -2
  115. package/dist/routers/auth.js.map +1 -1
  116. package/dist/routers/class.d.ts +157 -153
  117. package/dist/routers/class.d.ts.map +1 -1
  118. package/dist/routers/comment.d.ts +18 -18
  119. package/dist/routers/conversation.d.ts +11 -11
  120. package/dist/routers/department.d.ts +34 -34
  121. package/dist/routers/discussion.d.ts +68 -56
  122. package/dist/routers/discussion.d.ts.map +1 -1
  123. package/dist/routers/discussion.js +6 -2
  124. package/dist/routers/discussion.js.map +1 -1
  125. package/dist/routers/embedding.d.ts +73 -0
  126. package/dist/routers/embedding.d.ts.map +1 -0
  127. package/dist/routers/embedding.js +151 -0
  128. package/dist/routers/embedding.js.map +1 -0
  129. package/dist/routers/event.d.ts +57 -55
  130. package/dist/routers/event.d.ts.map +1 -1
  131. package/dist/routers/file.d.ts +14 -14
  132. package/dist/routers/folder.d.ts +38 -38
  133. package/dist/routers/labChat.d.ts +16 -16
  134. package/dist/routers/marketing.d.ts +1 -14
  135. package/dist/routers/marketing.d.ts.map +1 -1
  136. package/dist/routers/message.d.ts +13 -13
  137. package/dist/routers/newtonChat.d.ts +4 -4
  138. package/dist/routers/notifications.d.ts +5 -5
  139. package/dist/routers/permissions.d.ts +14 -14
  140. package/dist/routers/school.d.ts +59 -55
  141. package/dist/routers/school.d.ts.map +1 -1
  142. package/dist/routers/search.d.ts +22 -1
  143. package/dist/routers/search.d.ts.map +1 -1
  144. package/dist/routers/search.js +9 -3
  145. package/dist/routers/search.js.map +1 -1
  146. package/dist/routers/section.d.ts +4 -4
  147. package/dist/routers/studentProgress.d.ts +1 -1
  148. package/dist/routers/tag.d.ts +7 -7
  149. package/dist/routers/user.d.ts +99 -10
  150. package/dist/routers/user.d.ts.map +1 -1
  151. package/dist/routers/user.js +19 -2
  152. package/dist/routers/user.js.map +1 -1
  153. package/dist/routers/worksheet.d.ts +93 -55
  154. package/dist/routers/worksheet.d.ts.map +1 -1
  155. package/dist/routers/worksheet.js +26 -2
  156. package/dist/routers/worksheet.js.map +1 -1
  157. package/dist/routes/aiStream.d.ts +2 -0
  158. package/dist/routes/aiStream.d.ts.map +1 -0
  159. package/dist/routes/aiStream.js +726 -0
  160. package/dist/routes/aiStream.js.map +1 -0
  161. package/dist/seedDatabase.d.ts +3 -1
  162. package/dist/seedDatabase.d.ts.map +1 -1
  163. package/dist/seedDatabase.js +6 -6
  164. package/dist/seedDatabase.js.map +1 -1
  165. package/dist/services/adminInstitution.d.ts +8 -8
  166. package/dist/services/adminRunJob.d.ts +4 -4
  167. package/dist/services/agenda.d.ts +18 -18
  168. package/dist/services/aiChatStream.d.ts +88 -0
  169. package/dist/services/aiChatStream.d.ts.map +1 -0
  170. package/dist/services/aiChatStream.js +254 -0
  171. package/dist/services/aiChatStream.js.map +1 -0
  172. package/dist/services/aiModifierTools.d.ts +16 -0
  173. package/dist/services/aiModifierTools.d.ts.map +1 -0
  174. package/dist/services/aiModifierTools.js +274 -0
  175. package/dist/services/aiModifierTools.js.map +1 -0
  176. package/dist/services/aiProposalTools.d.ts +32 -0
  177. package/dist/services/aiProposalTools.d.ts.map +1 -0
  178. package/dist/services/aiProposalTools.js +207 -0
  179. package/dist/services/aiProposalTools.js.map +1 -0
  180. package/dist/services/aiStream.d.ts +22 -0
  181. package/dist/services/aiStream.d.ts.map +1 -0
  182. package/dist/services/aiStream.js +142 -0
  183. package/dist/services/aiStream.js.map +1 -0
  184. package/dist/services/aiTools.d.ts +16 -0
  185. package/dist/services/aiTools.d.ts.map +1 -0
  186. package/dist/services/aiTools.js +271 -0
  187. package/dist/services/aiTools.js.map +1 -0
  188. package/dist/services/announcement.d.ts +42 -42
  189. package/dist/services/announcement.d.ts.map +1 -1
  190. package/dist/services/announcement.js +7 -2
  191. package/dist/services/announcement.js.map +1 -1
  192. package/dist/services/assignment.d.ts +355 -345
  193. package/dist/services/assignment.d.ts.map +1 -1
  194. package/dist/services/assignment.js +30 -9
  195. package/dist/services/assignment.js.map +1 -1
  196. package/dist/services/attendance.d.ts +10 -10
  197. package/dist/services/auth.d.ts +4 -2
  198. package/dist/services/auth.d.ts.map +1 -1
  199. package/dist/services/auth.js +13 -4
  200. package/dist/services/auth.js.map +1 -1
  201. package/dist/services/class.d.ts +146 -142
  202. package/dist/services/class.d.ts.map +1 -1
  203. package/dist/services/class.js +24 -4
  204. package/dist/services/class.js.map +1 -1
  205. package/dist/services/comment.d.ts +18 -18
  206. package/dist/services/conversation.d.ts +11 -11
  207. package/dist/services/department.d.ts +33 -33
  208. package/dist/services/discussion.d.ts +58 -58
  209. package/dist/services/discussion.d.ts.map +1 -1
  210. package/dist/services/discussion.js +15 -8
  211. package/dist/services/discussion.js.map +1 -1
  212. package/dist/services/discussionSummary.d.ts +21 -0
  213. package/dist/services/discussionSummary.d.ts.map +1 -0
  214. package/dist/services/discussionSummary.js +179 -0
  215. package/dist/services/discussionSummary.js.map +1 -0
  216. package/dist/services/embedding.d.ts +85 -0
  217. package/dist/services/embedding.d.ts.map +1 -0
  218. package/dist/services/embedding.js +372 -0
  219. package/dist/services/embedding.js.map +1 -0
  220. package/dist/services/event.d.ts +55 -53
  221. package/dist/services/event.d.ts.map +1 -1
  222. package/dist/services/file.d.ts +28 -28
  223. package/dist/services/folder.d.ts +36 -36
  224. package/dist/services/folder.d.ts.map +1 -1
  225. package/dist/services/folder.js +32 -2
  226. package/dist/services/folder.js.map +1 -1
  227. package/dist/services/labChat.d.ts +16 -16
  228. package/dist/services/marketing.d.ts +2 -15
  229. package/dist/services/marketing.d.ts.map +1 -1
  230. package/dist/services/marketing.js +5 -5
  231. package/dist/services/marketing.js.map +1 -1
  232. package/dist/services/message.d.ts +11 -11
  233. package/dist/services/message.d.ts.map +1 -1
  234. package/dist/services/message.js +2 -2
  235. package/dist/services/message.js.map +1 -1
  236. package/dist/services/newtonChat.d.ts +4 -4
  237. package/dist/services/notification.d.ts +5 -5
  238. package/dist/services/notification.d.ts.map +1 -1
  239. package/dist/services/openaiDocumentGen.d.ts +37 -0
  240. package/dist/services/openaiDocumentGen.d.ts.map +1 -0
  241. package/dist/services/openaiDocumentGen.js +262 -0
  242. package/dist/services/openaiDocumentGen.js.map +1 -0
  243. package/dist/services/permissions.d.ts +14 -14
  244. package/dist/services/school.d.ts +54 -50
  245. package/dist/services/school.d.ts.map +1 -1
  246. package/dist/services/search.d.ts +13 -1
  247. package/dist/services/search.d.ts.map +1 -1
  248. package/dist/services/search.js +145 -2
  249. package/dist/services/search.js.map +1 -1
  250. package/dist/services/section.d.ts +3 -3
  251. package/dist/services/tag.d.ts +4 -4
  252. package/dist/services/user.d.ts +4 -4
  253. package/dist/services/user.d.ts.map +1 -1
  254. package/dist/services/user.js +10 -15
  255. package/dist/services/user.js.map +1 -1
  256. package/dist/services/userPrivacy.d.ts +86 -0
  257. package/dist/services/userPrivacy.d.ts.map +1 -0
  258. package/dist/services/userPrivacy.js +184 -0
  259. package/dist/services/userPrivacy.js.map +1 -0
  260. package/dist/services/worksheet.d.ts +86 -57
  261. package/dist/services/worksheet.d.ts.map +1 -1
  262. package/dist/services/worksheet.js +57 -5
  263. package/dist/services/worksheet.js.map +1 -1
  264. package/dist/utils/email.d.ts.map +1 -1
  265. package/dist/utils/email.js +7 -3
  266. package/dist/utils/email.js.map +1 -1
  267. package/dist/utils/streamBroadcast.d.ts +11 -0
  268. package/dist/utils/streamBroadcast.d.ts.map +1 -0
  269. package/dist/utils/streamBroadcast.js +32 -0
  270. package/dist/utils/streamBroadcast.js.map +1 -0
  271. package/dist/workers/connection.d.ts +15 -0
  272. package/dist/workers/connection.d.ts.map +1 -1
  273. package/dist/workers/connection.js +20 -2
  274. package/dist/workers/connection.js.map +1 -1
  275. package/dist/workers/index.js +4 -2
  276. package/dist/workers/index.js.map +1 -1
  277. package/dist/workers/processors/createRunJobWorker.d.ts.map +1 -1
  278. package/dist/workers/processors/createRunJobWorker.js +31 -8
  279. package/dist/workers/processors/createRunJobWorker.js.map +1 -1
  280. package/dist/workers/processors/embedContent.d.ts +8 -0
  281. package/dist/workers/processors/embedContent.d.ts.map +1 -0
  282. package/dist/workers/processors/embedContent.js +67 -0
  283. package/dist/workers/processors/embedContent.js.map +1 -0
  284. package/dist/workers/queues.d.ts +6 -0
  285. package/dist/workers/queues.d.ts.map +1 -1
  286. package/dist/workers/queues.js +5 -3
  287. package/dist/workers/queues.js.map +1 -1
  288. package/package.json +5 -1
  289. package/prisma/migrations/20260609215135_init/migration.sql +1412 -0
  290. package/prisma/migrations/20260610130000_add_worksheet_tags/migration.sql +13 -0
  291. package/prisma/migrations/20260610140000_expand_embedding_source_types/migration.sql +4 -0
  292. package/prisma/migrations/20260611120000_add_user_terms_acceptance/migration.sql +3 -0
  293. package/prisma/schema.prisma +44 -7
  294. package/src/index.ts +4 -0
  295. package/src/instrument.ts +1 -1
  296. package/src/lib/config/cors.ts +32 -9
  297. package/src/lib/config/env.ts +6 -0
  298. package/src/lib/googleCloudStorage.ts +21 -0
  299. package/src/lib/inferDocumentFormat.ts +58 -0
  300. package/src/lib/legal.ts +2 -0
  301. package/src/lib/prisma.ts +40 -1
  302. package/src/models/auth.ts +4 -0
  303. package/src/models/class.ts +3 -2
  304. package/src/models/marketing.ts +10 -2
  305. package/src/models/worksheet.ts +5 -2
  306. package/src/pipelines/aiLabChat.ts +245 -146
  307. package/src/pipelines/aiLabChatContract.ts +59 -69
  308. package/src/pipelines/aiNewtonChat.ts +46 -43
  309. package/src/pipelines/labChatPrompt.ts +115 -90
  310. package/src/routers/_app.ts +2 -0
  311. package/src/routers/auth.ts +13 -0
  312. package/src/routers/discussion.ts +7 -0
  313. package/src/routers/embedding.ts +164 -0
  314. package/src/routers/search.ts +10 -1
  315. package/src/routers/user.ts +26 -0
  316. package/src/routers/worksheet.ts +27 -0
  317. package/src/routes/aiStream.ts +827 -0
  318. package/src/seedDatabase.ts +4 -4
  319. package/src/services/aiChatStream.ts +341 -0
  320. package/src/services/aiModifierTools.ts +341 -0
  321. package/src/services/aiProposalTools.ts +274 -0
  322. package/src/services/aiStream.ts +175 -0
  323. package/src/services/aiTools.ts +290 -0
  324. package/src/services/announcement.ts +7 -0
  325. package/src/services/assignment.ts +31 -7
  326. package/src/services/auth.ts +14 -2
  327. package/src/services/class.ts +27 -2
  328. package/src/services/discussion.ts +22 -8
  329. package/src/services/discussionSummary.ts +226 -0
  330. package/src/services/embedding.ts +446 -0
  331. package/src/services/folder.ts +31 -0
  332. package/src/services/marketing.ts +3 -3
  333. package/src/services/message.ts +2 -2
  334. package/src/services/openaiDocumentGen.ts +319 -0
  335. package/src/services/search.ts +163 -1
  336. package/src/services/user.ts +9 -17
  337. package/src/services/userPrivacy.ts +196 -0
  338. package/src/services/worksheet.ts +77 -3
  339. package/src/utils/email.ts +5 -1
  340. package/src/utils/streamBroadcast.ts +48 -0
  341. package/src/workers/connection.ts +19 -0
  342. package/src/workers/index.ts +2 -0
  343. package/src/workers/processors/createRunJobWorker.ts +32 -6
  344. package/src/workers/processors/embedContent.ts +86 -0
  345. package/src/workers/queues.ts +5 -1
  346. package/tests/helpers/registerInput.ts +20 -0
  347. package/tests/integration/globalSetup.ts +10 -18
  348. package/tests/integration/routers/auth.test.ts +13 -18
  349. package/tests/unit/lib/inferDocumentFormat.test.ts +33 -0
  350. package/tests/unit/pipelines/aiLabChatContract.test.ts +38 -21
  351. package/tests/unit/pipelines/labChatPrompt.test.ts +23 -36
  352. package/tests/unit/services/aiChatStream.test.ts +92 -0
  353. package/tests/unit/services/openaiDocumentGen.test.ts +65 -0
  354. package/prisma/migrations/20250807062924_init/migration.sql +0 -436
  355. package/prisma/migrations/20250919063704_init2/migration.sql +0 -24
  356. package/prisma/migrations/20250920143543_add_profile_fields/migration.sql +0 -15
  357. package/prisma/migrations/20250922165147_add_chat_models/migration.sql +0 -68
  358. package/prisma/migrations/20250922165314_add_chat_roles/migration.sql +0 -5
  359. package/prisma/migrations/20250922171242_refactor_notification_system/migration.sql +0 -20
  360. package/prisma/migrations/20250922172208_add_mentions_system/migration.sql +0 -21
  361. package/prisma/migrations/20250925072732_add_lab_chat_system/migration.sql +0 -25
  362. package/prisma/migrations/20251020151505_add_upload_tracking_fields/migration.sql +0 -57
  363. package/prisma/migrations/20251109122857_annuoncements_comments/migration.sql +0 -30
  364. package/prisma/migrations/20251109135555_reactions_announcements_comments/migration.sql +0 -35
  365. package/prisma/migrations/20260410124000_add_submission_recommendation_state/migration.sql +0 -14
  366. package/prisma/migrations/20260415103500_add_session_type/migration.sql +0 -33
  367. package/prisma/migrations/20260415133000_add_ai_usage_logs/migration.sql +0 -19
  368. package/prisma/migrations/20260417083000_add_conversation_member_hidden_at/migration.sql +0 -2
  369. package/prisma/migrations/20260502230500_assignment_submission_comments/migration.sql +0 -60
  370. package/prisma/migrations/20260504071500_school_memberships/migration.sql +0 -81
  371. package/prisma/migrations/20260506162500_consolidate_run_job_and_unify_job_status/migration.sql +0 -166
  372. package/prisma/migrations/20260509220000_institution_overhaul/migration.sql +0 -184
  373. package/prisma/migrations/20260510170000_add_folder_permissions/migration.sql +0 -93
  374. package/prisma/migrations/20260510183000_add_discussions/migration.sql +0 -151
  375. /package/.github/workflows/{npm.yml → npm-publish.yml} +0 -0
@@ -26,26 +26,26 @@ export declare const userRouter: import("@trpc/server").TRPCBuiltRouter<{
26
26
  bio: any;
27
27
  location: any;
28
28
  website: any;
29
- profilePicture: string | null;
30
- profilePictureThumbnail: string | null;
29
+ profilePicture: any;
30
+ profilePictureThumbnail: any;
31
31
  };
32
32
  };
33
33
  meta: object;
34
34
  }>;
35
35
  updateProfile: import("@trpc/server").TRPCMutationProcedure<{
36
36
  input: {
37
- profile?: {
38
- location?: string | null | undefined;
39
- displayName?: string | null | undefined;
40
- bio?: string | null | undefined;
41
- website?: string | null | undefined;
42
- } | undefined;
43
37
  profilePicture?: {
44
38
  filePath: string;
45
39
  fileName: string;
46
40
  fileType: string;
47
41
  fileSize: number;
48
42
  } | undefined;
43
+ profile?: {
44
+ displayName?: string | null | undefined;
45
+ bio?: string | null | undefined;
46
+ location?: string | null | undefined;
47
+ website?: string | null | undefined;
48
+ } | undefined;
49
49
  dicebearAvatar?: {
50
50
  url: string;
51
51
  } | undefined;
@@ -58,8 +58,8 @@ export declare const userRouter: import("@trpc/server").TRPCBuiltRouter<{
58
58
  bio: any;
59
59
  location: any;
60
60
  website: any;
61
- profilePicture: string | null;
62
- profilePictureThumbnail: string | null;
61
+ profilePicture: any;
62
+ profilePictureThumbnail: any;
63
63
  };
64
64
  };
65
65
  meta: object;
@@ -76,5 +76,94 @@ export declare const userRouter: import("@trpc/server").TRPCBuiltRouter<{
76
76
  };
77
77
  meta: object;
78
78
  }>;
79
+ exportData: import("@trpc/server").TRPCQueryProcedure<{
80
+ input: void;
81
+ output: {
82
+ exportedAt: string;
83
+ user: {
84
+ id: string;
85
+ username: string;
86
+ email: string;
87
+ verified: boolean;
88
+ termsAcceptedAt: Date | null;
89
+ termsVersion: string | null;
90
+ profile: {
91
+ id: string;
92
+ userId: string;
93
+ displayName: string | null;
94
+ bio: string | null;
95
+ location: string | null;
96
+ website: string | null;
97
+ createdAt: Date;
98
+ updatedAt: Date;
99
+ profilePicture: string | null;
100
+ profilePictureThumbnail: string | null;
101
+ } | null;
102
+ teacherIn: {
103
+ section: string;
104
+ id: string;
105
+ name: string;
106
+ subject: string;
107
+ }[];
108
+ studentIn: {
109
+ section: string;
110
+ id: string;
111
+ name: string;
112
+ subject: string;
113
+ }[];
114
+ submissions: {
115
+ assignment: {
116
+ id: string;
117
+ classId: string;
118
+ title: string;
119
+ };
120
+ id: string;
121
+ createdAt: Date;
122
+ extendedResponse: string | null;
123
+ gradeReceived: number | null;
124
+ submittedAt: Date | null;
125
+ }[];
126
+ events: {
127
+ id: string;
128
+ location: string | null;
129
+ name: string | null;
130
+ startTime: Date;
131
+ endTime: Date;
132
+ remarks: string | null;
133
+ }[];
134
+ notificationsReceived: {
135
+ id: string;
136
+ createdAt: Date;
137
+ title: string;
138
+ content: string;
139
+ read: boolean;
140
+ }[];
141
+ schoolMemberships: {
142
+ status: import(".prisma/client").$Enums.SchoolMembershipStatus;
143
+ school: {
144
+ id: string;
145
+ name: string;
146
+ };
147
+ role: import(".prisma/client").$Enums.SchoolMembershipRole;
148
+ }[];
149
+ sentMessages: {
150
+ id: string;
151
+ createdAt: Date;
152
+ content: string;
153
+ conversationId: string;
154
+ }[];
155
+ };
156
+ };
157
+ meta: object;
158
+ }>;
159
+ deleteAccount: import("@trpc/server").TRPCMutationProcedure<{
160
+ input: {
161
+ confirmUsername: string;
162
+ };
163
+ output: {
164
+ success: boolean;
165
+ };
166
+ meta: object;
167
+ }>;
79
168
  }>>;
80
169
  //# sourceMappingURL=user.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"/","sources":["routers/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiExB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgBrB,CAAC"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"/","sources":["routers/user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqExB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCrB,CAAC"}
@@ -1,8 +1,10 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7b0b6e3d-022d-5fe3-a54e-a8f4a40964f3")}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]="10c9f9c2-5706-58e3-b2db-3ca52ac3e956")}catch(e){}}();
3
+ import { TRPCError } from "@trpc/server";
3
4
  import { z } from "zod";
4
5
  import { createTRPCRouter, protectedProcedure } from "../trpc.js";
5
6
  import { getProfile, updateProfile, getUploadUrl, } from "../services/user.js";
7
+ import { deleteUserAccount, exportUserData, } from "../services/userPrivacy.js";
6
8
  const fileUploadSchema = z.object({
7
9
  filePath: z.string().min(1, "File path is required"),
8
10
  fileName: z.string().min(1, "File name is required"),
@@ -57,6 +59,21 @@ export const userRouter = createTRPCRouter({
57
59
  getUploadUrl: protectedProcedure
58
60
  .input(getUploadUrlSchema)
59
61
  .mutation(({ ctx, input }) => getUploadUrl(ctx.user.id, input.fileName, input.fileType)),
62
+ exportData: protectedProcedure.query(({ ctx }) => exportUserData(ctx.user.id)),
63
+ deleteAccount: protectedProcedure
64
+ .input(z.object({
65
+ confirmUsername: z.string().min(1),
66
+ }))
67
+ .mutation(async ({ ctx, input }) => {
68
+ const profile = await getProfile(ctx.user.id);
69
+ if (profile.username !== input.confirmUsername) {
70
+ throw new TRPCError({
71
+ code: "BAD_REQUEST",
72
+ message: "Username confirmation does not match",
73
+ });
74
+ }
75
+ return deleteUserAccount(ctx.user.id);
76
+ }),
60
77
  });
61
78
  //# sourceMappingURL=user.js.map
62
- //# debugId=7b0b6e3d-022d-5fe3-a54e-a8f4a40964f3
79
+ //# debugId=10c9f9c2-5706-58e3-b2db-3ca52ac3e956
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sources":["routers/user.ts"],"sourceRoot":"/","sourcesContent":["import { z } from \"zod\";\nimport { createTRPCRouter, protectedProcedure } from \"../trpc.js\";\nimport {\n getProfile,\n updateProfile,\n getUploadUrl,\n} from \"../services/user.js\";\n\nconst fileUploadSchema = z.object({\n filePath: z.string().min(1, \"File path is required\"),\n fileName: z.string().min(1, \"File name is required\"),\n fileType: z\n .string()\n .regex(\n /^image\\/(jpeg|jpg|png|gif|webp)$/i,\n \"Only image files (JPEG, PNG, GIF, WebP) are allowed\"\n ),\n fileSize: z.number().max(5 * 1024 * 1024, \"File size must be less than 5MB\"),\n});\n\nconst dicebearSchema = z.object({\n url: z.string().url(\"Invalid DiceBear avatar URL\"),\n});\n\nconst profileSchema = z.object({\n displayName: z\n .string()\n .nullable()\n .optional()\n .transform((val) => (val === null ? undefined : val)),\n bio: z\n .string()\n .nullable()\n .optional()\n .transform((val) => (val === null ? undefined : val)),\n location: z\n .string()\n .nullable()\n .optional()\n .transform((val) => (val === null ? undefined : val)),\n website: z\n .union([\n z.string().url(),\n z.literal(\"\"),\n z.null().transform(() => undefined),\n ])\n .optional(),\n});\n\nconst updateProfileSchema = z.object({\n profile: profileSchema.optional(),\n profilePicture: fileUploadSchema.optional(),\n dicebearAvatar: dicebearSchema.optional(),\n});\n\nconst getUploadUrlSchema = z.object({\n fileName: z.string().min(1, \"File name is required\"),\n fileType: z\n .string()\n .regex(\n /^image\\/(jpeg|jpg|png|gif|webp)$/i,\n \"Only image files are allowed\"\n ),\n});\n\nexport const userRouter = createTRPCRouter({\n getProfile: protectedProcedure.query(({ ctx }) =>\n getProfile(ctx.user!.id)\n ),\n\n updateProfile: protectedProcedure\n .input(updateProfileSchema)\n .mutation(({ ctx, input }) =>\n updateProfile(ctx.user!.id, input)\n ),\n\n getUploadUrl: protectedProcedure\n .input(getUploadUrlSchema)\n .mutation(({ ctx, input }) =>\n getUploadUrl(ctx.user!.id, input.fileName, input.fileType)\n ),\n});\n"],"names":[],"mappings":"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","debug_id":"7b0b6e3d-022d-5fe3-a54e-a8f4a40964f3"}
1
+ {"version":3,"file":"user.js","sources":["routers/user.ts"],"sourceRoot":"/","sourcesContent":["import { TRPCError } from \"@trpc/server\";\nimport { z } from \"zod\";\nimport { createTRPCRouter, protectedProcedure } from \"../trpc.js\";\nimport {\n getProfile,\n updateProfile,\n getUploadUrl,\n} from \"../services/user.js\";\nimport {\n deleteUserAccount,\n exportUserData,\n} from \"../services/userPrivacy.js\";\n\nconst fileUploadSchema = z.object({\n filePath: z.string().min(1, \"File path is required\"),\n fileName: z.string().min(1, \"File name is required\"),\n fileType: z\n .string()\n .regex(\n /^image\\/(jpeg|jpg|png|gif|webp)$/i,\n \"Only image files (JPEG, PNG, GIF, WebP) are allowed\"\n ),\n fileSize: z.number().max(5 * 1024 * 1024, \"File size must be less than 5MB\"),\n});\n\nconst dicebearSchema = z.object({\n url: z.string().url(\"Invalid DiceBear avatar URL\"),\n});\n\nconst profileSchema = z.object({\n displayName: z\n .string()\n .nullable()\n .optional()\n .transform((val) => (val === null ? undefined : val)),\n bio: z\n .string()\n .nullable()\n .optional()\n .transform((val) => (val === null ? undefined : val)),\n location: z\n .string()\n .nullable()\n .optional()\n .transform((val) => (val === null ? undefined : val)),\n website: z\n .union([\n z.string().url(),\n z.literal(\"\"),\n z.null().transform(() => undefined),\n ])\n .optional(),\n});\n\nconst updateProfileSchema = z.object({\n profile: profileSchema.optional(),\n profilePicture: fileUploadSchema.optional(),\n dicebearAvatar: dicebearSchema.optional(),\n});\n\nconst getUploadUrlSchema = z.object({\n fileName: z.string().min(1, \"File name is required\"),\n fileType: z\n .string()\n .regex(\n /^image\\/(jpeg|jpg|png|gif|webp)$/i,\n \"Only image files are allowed\"\n ),\n});\n\nexport const userRouter = createTRPCRouter({\n getProfile: protectedProcedure.query(({ ctx }) =>\n getProfile(ctx.user!.id)\n ),\n\n updateProfile: protectedProcedure\n .input(updateProfileSchema)\n .mutation(({ ctx, input }) =>\n updateProfile(ctx.user!.id, input)\n ),\n\n getUploadUrl: protectedProcedure\n .input(getUploadUrlSchema)\n .mutation(({ ctx, input }) =>\n getUploadUrl(ctx.user!.id, input.fileName, input.fileType)\n ),\n\n exportData: protectedProcedure.query(({ ctx }) =>\n exportUserData(ctx.user!.id),\n ),\n\n deleteAccount: protectedProcedure\n .input(\n z.object({\n confirmUsername: z.string().min(1),\n }),\n )\n .mutation(async ({ ctx, input }) => {\n const profile = await getProfile(ctx.user!.id);\n if (profile.username !== input.confirmUsername) {\n throw new TRPCError({\n code: \"BAD_REQUEST\",\n message: \"Username confirmation does not match\",\n });\n }\n return deleteUserAccount(ctx.user!.id);\n }),\n});\n"],"names":[],"mappings":"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","debug_id":"10c9f9c2-5706-58e3-b2db-3ca52ac3e956"}
@@ -22,37 +22,43 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
22
22
  };
23
23
  output: {
24
24
  class: {
25
- name: string;
25
+ section: string;
26
26
  id: string;
27
+ name: string;
27
28
  schoolId: string | null;
28
- subject: string;
29
29
  color: string | null;
30
- section: string;
30
+ subject: string;
31
31
  syllabus: string | null;
32
32
  departmentId: string | null;
33
33
  discussionsEnabled: boolean;
34
34
  studentsCanCreateDiscussions: boolean;
35
35
  studentsCanReply: boolean;
36
36
  } | null;
37
+ tags: {
38
+ id: string;
39
+ name: string;
40
+ color: string;
41
+ classId: string;
42
+ }[];
37
43
  questions: {
38
44
  type: import(".prisma/client").$Enums.WorksheetQuestionType;
39
45
  options: import("@prisma/client/runtime/library.js").JsonValue | null;
46
+ markScheme: import("@prisma/client/runtime/library.js").JsonValue | null;
40
47
  id: string;
41
48
  createdAt: Date;
42
49
  updatedAt: Date;
43
- order: number | null;
44
50
  points: number;
45
- worksheetId: string;
46
- markScheme: import("@prisma/client/runtime/library.js").JsonValue | null;
47
51
  question: string;
52
+ worksheetId: string;
53
+ order: number | null;
48
54
  answer: string;
49
55
  }[];
50
56
  } & {
51
57
  status: import(".prisma/client").$Enums.JobStatus | null;
52
- name: string;
53
58
  id: string;
54
59
  createdAt: Date;
55
60
  updatedAt: Date;
61
+ name: string;
56
62
  classId: string;
57
63
  runJobId: string | null;
58
64
  sourceUrl: string | null;
@@ -75,14 +81,20 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
75
81
  };
76
82
  output: {
77
83
  questionCount: number;
84
+ tags: {
85
+ id: string;
86
+ name: string;
87
+ color: string;
88
+ classId: string;
89
+ }[];
78
90
  questions: {
79
91
  id: string;
80
92
  }[];
81
93
  status: import(".prisma/client").$Enums.JobStatus | null;
82
- name: string;
83
94
  id: string;
84
95
  createdAt: Date;
85
96
  updatedAt: Date;
97
+ name: string;
86
98
  classId: string;
87
99
  runJobId: string | null;
88
100
  sourceUrl: string | null;
@@ -96,10 +108,10 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
96
108
  };
97
109
  output: {
98
110
  status: import(".prisma/client").$Enums.JobStatus | null;
99
- name: string;
100
111
  id: string;
101
112
  createdAt: Date;
102
113
  updatedAt: Date;
114
+ name: string;
103
115
  classId: string;
104
116
  runJobId: string | null;
105
117
  sourceUrl: string | null;
@@ -112,10 +124,10 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
112
124
  };
113
125
  output: {
114
126
  status: import(".prisma/client").$Enums.JobStatus | null;
115
- name: string;
116
127
  id: string;
117
128
  createdAt: Date;
118
129
  updatedAt: Date;
130
+ name: string;
119
131
  classId: string;
120
132
  runJobId: string | null;
121
133
  sourceUrl: string | null;
@@ -130,10 +142,10 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
130
142
  };
131
143
  output: {
132
144
  status: import(".prisma/client").$Enums.JobStatus | null;
133
- name: string;
134
145
  id: string;
135
146
  createdAt: Date;
136
147
  updatedAt: Date;
148
+ name: string;
137
149
  classId: string;
138
150
  runJobId: string | null;
139
151
  sourceUrl: string | null;
@@ -149,10 +161,10 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
149
161
  };
150
162
  output: {
151
163
  status: import(".prisma/client").$Enums.JobStatus | null;
152
- name: string;
153
164
  id: string;
154
165
  createdAt: Date;
155
166
  updatedAt: Date;
167
+ name: string;
156
168
  classId: string;
157
169
  runJobId: string | null;
158
170
  sourceUrl: string | null;
@@ -169,10 +181,10 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
169
181
  output: {
170
182
  runJobId: string;
171
183
  status: import(".prisma/client").$Enums.JobStatus | null;
172
- name: string;
173
184
  id: string;
174
185
  createdAt: Date;
175
186
  updatedAt: Date;
187
+ name: string;
176
188
  classId: string;
177
189
  sourceUrl: string | null;
178
190
  };
@@ -218,10 +230,10 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
218
230
  output: {
219
231
  runJobId: string;
220
232
  status: import(".prisma/client").$Enums.JobStatus | null;
221
- name: string;
222
233
  id: string;
223
234
  createdAt: Date;
224
235
  updatedAt: Date;
236
+ name: string;
225
237
  classId: string;
226
238
  sourceUrl: string | null;
227
239
  };
@@ -230,25 +242,25 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
230
242
  addQuestion: import("@trpc/server").TRPCMutationProcedure<{
231
243
  input: {
232
244
  type: "ESSAY" | "MULTIPLE_CHOICE" | "TRUE_FALSE" | "SHORT_ANSWER" | "LONG_ANSWER" | "MATH_EXPRESSION";
233
- worksheetId: string;
234
245
  question: string;
246
+ worksheetId: string;
235
247
  answer: string;
236
248
  options?: any;
237
- order?: number | undefined;
238
- points?: number | undefined;
239
249
  markScheme?: any;
250
+ points?: number | undefined;
251
+ order?: number | undefined;
240
252
  };
241
253
  output: {
242
254
  type: import(".prisma/client").$Enums.WorksheetQuestionType;
243
255
  options: import("@prisma/client/runtime/library.js").JsonValue | null;
256
+ markScheme: import("@prisma/client/runtime/library.js").JsonValue | null;
244
257
  id: string;
245
258
  createdAt: Date;
246
259
  updatedAt: Date;
247
- order: number | null;
248
260
  points: number;
249
- worksheetId: string;
250
- markScheme: import("@prisma/client/runtime/library.js").JsonValue | null;
251
261
  question: string;
262
+ worksheetId: string;
263
+ order: number | null;
252
264
  answer: string;
253
265
  };
254
266
  meta: object;
@@ -271,22 +283,22 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
271
283
  worksheetId: string;
272
284
  type?: "ESSAY" | "MULTIPLE_CHOICE" | "TRUE_FALSE" | "SHORT_ANSWER" | "LONG_ANSWER" | "MATH_EXPRESSION" | undefined;
273
285
  options?: any;
274
- points?: number | undefined;
275
286
  markScheme?: any;
287
+ points?: number | undefined;
276
288
  question?: string | undefined;
277
289
  answer?: string | undefined;
278
290
  };
279
291
  output: {
280
292
  type: import(".prisma/client").$Enums.WorksheetQuestionType;
281
293
  options: import("@prisma/client/runtime/library.js").JsonValue | null;
294
+ markScheme: import("@prisma/client/runtime/library.js").JsonValue | null;
282
295
  id: string;
283
296
  createdAt: Date;
284
297
  updatedAt: Date;
285
- order: number | null;
286
298
  points: number;
287
- worksheetId: string;
288
- markScheme: import("@prisma/client/runtime/library.js").JsonValue | null;
289
299
  question: string;
300
+ worksheetId: string;
301
+ order: number | null;
290
302
  answer: string;
291
303
  };
292
304
  meta: object;
@@ -299,14 +311,14 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
299
311
  output: {
300
312
  type: import(".prisma/client").$Enums.WorksheetQuestionType;
301
313
  options: import("@prisma/client/runtime/library.js").JsonValue | null;
314
+ markScheme: import("@prisma/client/runtime/library.js").JsonValue | null;
302
315
  id: string;
303
316
  createdAt: Date;
304
317
  updatedAt: Date;
305
- order: number | null;
306
318
  points: number;
307
- worksheetId: string;
308
- markScheme: import("@prisma/client/runtime/library.js").JsonValue | null;
309
319
  question: string;
320
+ worksheetId: string;
321
+ order: number | null;
310
322
  answer: string;
311
323
  };
312
324
  meta: object;
@@ -327,15 +339,15 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
327
339
  id: string;
328
340
  createdAt: Date;
329
341
  updatedAt: Date | null;
330
- studentId: string;
331
- questionId: string;
342
+ feedback: string | null;
343
+ runJobId: string | null;
332
344
  response: string;
333
345
  isCorrect: boolean;
334
346
  markschemeState: import("@prisma/client/runtime/library.js").JsonValue | null;
335
347
  points: number;
336
- feedback: string | null;
348
+ studentId: string;
349
+ questionId: string;
337
350
  studentWorksheetResponseId: string | null;
338
- runJobId: string | null;
339
351
  })[];
340
352
  } & {
341
353
  id: string;
@@ -343,16 +355,16 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
343
355
  updatedAt: Date;
344
356
  submissionId: string | null;
345
357
  studentId: string;
358
+ worksheetId: string;
346
359
  submittedAt: Date | null;
347
360
  submitted: boolean;
348
- worksheetId: string;
349
361
  };
350
362
  meta: object;
351
363
  }>;
352
364
  answerQuestion: import("@trpc/server").TRPCMutationProcedure<{
353
365
  input: {
354
- questionId: string;
355
366
  response: string;
367
+ questionId: string;
356
368
  worksheetResponseId: string;
357
369
  };
358
370
  output: {
@@ -361,15 +373,15 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
361
373
  id: string;
362
374
  createdAt: Date;
363
375
  updatedAt: Date | null;
364
- studentId: string;
365
- questionId: string;
376
+ feedback: string | null;
377
+ runJobId: string | null;
366
378
  response: string;
367
379
  isCorrect: boolean;
368
380
  markschemeState: import("@prisma/client/runtime/library.js").JsonValue | null;
369
381
  points: number;
370
- feedback: string | null;
382
+ studentId: string;
383
+ questionId: string;
371
384
  studentWorksheetResponseId: string | null;
372
- runJobId: string | null;
373
385
  }[];
374
386
  } & {
375
387
  id: string;
@@ -377,9 +389,9 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
377
389
  updatedAt: Date;
378
390
  submissionId: string | null;
379
391
  studentId: string;
392
+ worksheetId: string;
380
393
  submittedAt: Date | null;
381
394
  submitted: boolean;
382
- worksheetId: string;
383
395
  };
384
396
  meta: object;
385
397
  }>;
@@ -393,15 +405,15 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
393
405
  id: string;
394
406
  createdAt: Date;
395
407
  updatedAt: Date | null;
396
- studentId: string;
397
- questionId: string;
408
+ feedback: string | null;
409
+ runJobId: string | null;
398
410
  response: string;
399
411
  isCorrect: boolean;
400
412
  markschemeState: import("@prisma/client/runtime/library.js").JsonValue | null;
401
413
  points: number;
402
- feedback: string | null;
414
+ studentId: string;
415
+ questionId: string;
403
416
  studentWorksheetResponseId: string | null;
404
- runJobId: string | null;
405
417
  };
406
418
  meta: object;
407
419
  }>;
@@ -415,27 +427,27 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
415
427
  id: string;
416
428
  createdAt: Date;
417
429
  updatedAt: Date | null;
418
- studentId: string;
419
- questionId: string;
430
+ feedback: string | null;
431
+ runJobId: string | null;
420
432
  response: string;
421
433
  isCorrect: boolean;
422
434
  markschemeState: import("@prisma/client/runtime/library.js").JsonValue | null;
423
435
  points: number;
424
- feedback: string | null;
436
+ studentId: string;
437
+ questionId: string;
425
438
  studentWorksheetResponseId: string | null;
426
- runJobId: string | null;
427
439
  } | null;
428
440
  meta: object;
429
441
  }>;
430
442
  gradeAnswer: import("@trpc/server").TRPCMutationProcedure<{
431
443
  input: {
432
- questionId: string;
433
444
  isCorrect: boolean;
445
+ questionId: string;
434
446
  studentWorksheetResponseId: string;
447
+ feedback?: string | undefined;
435
448
  response?: string | undefined;
436
449
  markschemeState?: any;
437
450
  points?: number | undefined;
438
- feedback?: string | undefined;
439
451
  responseId?: string | undefined;
440
452
  };
441
453
  output: {
@@ -443,15 +455,15 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
443
455
  id: string;
444
456
  createdAt: Date;
445
457
  updatedAt: Date | null;
446
- studentId: string;
447
- questionId: string;
458
+ feedback: string | null;
459
+ runJobId: string | null;
448
460
  response: string;
449
461
  isCorrect: boolean;
450
462
  markschemeState: import("@prisma/client/runtime/library.js").JsonValue | null;
451
463
  points: number;
452
- feedback: string | null;
464
+ studentId: string;
465
+ questionId: string;
453
466
  studentWorksheetResponseId: string | null;
454
- runJobId: string | null;
455
467
  };
456
468
  meta: object;
457
469
  }>;
@@ -463,22 +475,22 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
463
475
  output: {
464
476
  id: string;
465
477
  createdAt: Date;
478
+ content: string;
466
479
  assignmentId: string | null;
467
480
  submissionId: string | null;
468
481
  announcementId: string | null;
469
482
  modifiedAt: Date | null;
470
- content: string;
471
483
  authorId: string;
472
- parentCommentId: string | null;
473
484
  isPinned: boolean;
485
+ parentCommentId: string | null;
474
486
  studentQuestionProgressId: string | null;
475
487
  };
476
488
  meta: object;
477
489
  }>;
478
490
  updateUploadProgress: import("@trpc/server").TRPCMutationProcedure<{
479
491
  input: {
480
- fileId: string;
481
492
  progress: number;
493
+ fileId: string;
482
494
  };
483
495
  output: {
484
496
  success: boolean;
@@ -486,5 +498,31 @@ export declare const worksheetRouter: import("@trpc/server").TRPCBuiltRouter<{
486
498
  };
487
499
  meta: object;
488
500
  }>;
501
+ setTags: import("@trpc/server").TRPCMutationProcedure<{
502
+ input: {
503
+ [x: string]: unknown;
504
+ classId: string;
505
+ worksheetId: string;
506
+ tagIds: string[];
507
+ };
508
+ output: {
509
+ tags: {
510
+ id: string;
511
+ name: string;
512
+ color: string;
513
+ classId: string;
514
+ }[];
515
+ } & {
516
+ status: import(".prisma/client").$Enums.JobStatus | null;
517
+ id: string;
518
+ createdAt: Date;
519
+ updatedAt: Date;
520
+ name: string;
521
+ classId: string;
522
+ runJobId: string | null;
523
+ sourceUrl: string | null;
524
+ };
525
+ meta: object;
526
+ }>;
489
527
  }>>;
490
528
  //# sourceMappingURL=worksheet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worksheet.d.ts","sourceRoot":"/","sources":["routers/worksheet.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyDxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyX1B,CAAC"}
1
+ {"version":3,"file":"worksheet.d.ts","sourceRoot":"/","sources":["routers/worksheet.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyDxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoZ1B,CAAC"}
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="01f79192-c65e-5368-a165-55494a6da15a")}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]="7414f024-7d8b-5148-ba29-f602198fddc2")}catch(e){}}();
3
3
  import { TRPCError } from "@trpc/server";
4
4
  import { prisma } from "../lib/prisma.js";
5
5
  import { confirmDirectUpload, createDirectUploadFiles, updateUploadProgress, } from "../lib/fileUpload.js";
@@ -276,6 +276,30 @@ export const worksheetRouter = createTRPCRouter({
276
276
  progress: input.progress,
277
277
  };
278
278
  }),
279
+ setTags: protectedTeacherProcedure
280
+ .input(z.object({
281
+ worksheetId: z.string(),
282
+ tagIds: z.array(z.string()),
283
+ }))
284
+ .mutation(async ({ ctx, input }) => {
285
+ const worksheet = await prisma.worksheet.findUnique({
286
+ where: { id: input.worksheetId },
287
+ select: { id: true, classId: true },
288
+ });
289
+ if (!worksheet) {
290
+ throw new TRPCError({
291
+ code: "NOT_FOUND",
292
+ message: "Worksheet not found",
293
+ });
294
+ }
295
+ return prisma.worksheet.update({
296
+ where: { id: input.worksheetId },
297
+ data: {
298
+ tags: { set: input.tagIds.map((id) => ({ id })) },
299
+ },
300
+ include: { tags: true },
301
+ });
302
+ }),
279
303
  });
280
304
  //# sourceMappingURL=worksheet.js.map
281
- //# debugId=01f79192-c65e-5368-a165-55494a6da15a
305
+ //# debugId=7414f024-7d8b-5148-ba29-f602198fddc2