@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
@@ -0,0 +1,151 @@
1
+ /**
2
+ * tRPC router for embedding/RAG operations.
3
+ * Provides search and indexing triggers for class content.
4
+ */
5
+
6
+ !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]="6aa753e1-b0da-52b8-9e5c-afa887df290b")}catch(e){}}();
7
+ import { z } from 'zod';
8
+ import { createTRPCRouter, protectedProcedure } from '../trpc.js';
9
+ import { searchEmbeddings } from '../services/embedding.js';
10
+ import { enqueueRunJob } from '../workers/queues.js';
11
+ import { prisma } from '../lib/prisma.js';
12
+ import { TRPCError } from '@trpc/server';
13
+ const sourceTypeEnum = z.enum([
14
+ 'FILE', 'ASSIGNMENT', 'WORKSHEET', 'ANNOUNCEMENT',
15
+ 'SECTION', 'DISCUSSION', 'SUBMISSION', 'SYLLABUS',
16
+ ]);
17
+ export const embeddingRouter = createTRPCRouter({
18
+ /**
19
+ * Semantic search over class materials.
20
+ */
21
+ search: protectedProcedure
22
+ .input(z.object({
23
+ classId: z.string(),
24
+ query: z.string().min(1).max(500),
25
+ limit: z.number().min(1).max(20).default(5),
26
+ sourceTypes: z.array(sourceTypeEnum).optional(),
27
+ }))
28
+ .query(async ({ input, ctx }) => {
29
+ const userInClass = await prisma.class.findFirst({
30
+ where: {
31
+ id: input.classId,
32
+ OR: [
33
+ { teachers: { some: { id: ctx.user.id } } },
34
+ { students: { some: { id: ctx.user.id } } },
35
+ ],
36
+ },
37
+ });
38
+ if (!userInClass) {
39
+ throw new TRPCError({ code: 'FORBIDDEN', message: 'Access denied' });
40
+ }
41
+ const results = await searchEmbeddings({
42
+ classId: input.classId,
43
+ query: input.query,
44
+ limit: input.limit,
45
+ sourceTypes: input.sourceTypes,
46
+ });
47
+ return results;
48
+ }),
49
+ /**
50
+ * Trigger re-indexing of a specific resource.
51
+ * Teachers only.
52
+ */
53
+ reindex: protectedProcedure
54
+ .input(z.object({
55
+ classId: z.string(),
56
+ sourceType: sourceTypeEnum,
57
+ sourceId: z.string(),
58
+ }))
59
+ .mutation(async ({ input, ctx }) => {
60
+ const teacherInClass = await prisma.class.findFirst({
61
+ where: {
62
+ id: input.classId,
63
+ teachers: { some: { id: ctx.user.id } },
64
+ },
65
+ });
66
+ if (!teacherInClass) {
67
+ throw new TRPCError({ code: 'FORBIDDEN', message: 'Teacher access required' });
68
+ }
69
+ const result = await enqueueRunJob('EMBED_CONTENT', {
70
+ classId: input.classId,
71
+ sourceType: input.sourceType,
72
+ sourceId: input.sourceId,
73
+ }, {
74
+ classId: input.classId,
75
+ userId: ctx.user.id,
76
+ });
77
+ return { runJobId: result.runJobId };
78
+ }),
79
+ /**
80
+ * Bulk index all content for a class.
81
+ * Teachers only. Useful for initial setup.
82
+ */
83
+ indexAll: protectedProcedure
84
+ .input(z.object({
85
+ classId: z.string(),
86
+ }))
87
+ .mutation(async ({ input, ctx }) => {
88
+ const teacherInClass = await prisma.class.findFirst({
89
+ where: {
90
+ id: input.classId,
91
+ teachers: { some: { id: ctx.user.id } },
92
+ },
93
+ });
94
+ if (!teacherInClass) {
95
+ throw new TRPCError({ code: 'FORBIDDEN', message: 'Teacher access required' });
96
+ }
97
+ const [assignments, worksheets, announcements, discussions, submissions, classData, classFiles] = await Promise.all([
98
+ prisma.assignment.findMany({ where: { classId: input.classId }, select: { id: true } }),
99
+ prisma.worksheet.findMany({ where: { classId: input.classId }, select: { id: true } }),
100
+ prisma.announcement.findMany({ where: { classId: input.classId }, select: { id: true } }),
101
+ prisma.discussion.findMany({ where: { classId: input.classId }, select: { id: true } }),
102
+ prisma.submission.findMany({
103
+ where: { assignment: { classId: input.classId }, gradeReceived: { not: null } },
104
+ select: { id: true },
105
+ }),
106
+ prisma.class.findUnique({ where: { id: input.classId }, select: { syllabus: true } }),
107
+ prisma.folder.findUnique({
108
+ where: { classId: input.classId },
109
+ select: { files: { select: { id: true }, where: { uploadStatus: 'COMPLETED' } } },
110
+ }),
111
+ ]);
112
+ const jobs = [];
113
+ const opts = { classId: input.classId, userId: ctx.user.id };
114
+ for (const a of assignments) {
115
+ jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'ASSIGNMENT', sourceId: a.id }, opts));
116
+ }
117
+ for (const w of worksheets) {
118
+ jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'WORKSHEET', sourceId: w.id }, opts));
119
+ }
120
+ for (const ann of announcements) {
121
+ jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'ANNOUNCEMENT', sourceId: ann.id }, opts));
122
+ }
123
+ for (const d of discussions) {
124
+ jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'DISCUSSION', sourceId: d.id }, opts));
125
+ }
126
+ for (const s of submissions) {
127
+ jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'SUBMISSION', sourceId: s.id }, opts));
128
+ }
129
+ if (classData?.syllabus) {
130
+ jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'SYLLABUS', sourceId: input.classId }, opts));
131
+ }
132
+ const files = classFiles?.files ?? [];
133
+ for (const f of files) {
134
+ jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'FILE', sourceId: f.id }, opts));
135
+ }
136
+ await Promise.allSettled(jobs);
137
+ return {
138
+ queued: {
139
+ assignments: assignments.length,
140
+ worksheets: worksheets.length,
141
+ announcements: announcements.length,
142
+ discussions: discussions.length,
143
+ submissions: submissions.length,
144
+ syllabus: classData?.syllabus ? 1 : 0,
145
+ files: files.length,
146
+ },
147
+ };
148
+ }),
149
+ });
150
+ //# sourceMappingURL=embedding.js.map
151
+ //# debugId=6aa753e1-b0da-52b8-9e5c-afa887df290b
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.js","sources":["routers/embedding.ts"],"sourceRoot":"/","sourcesContent":["/**\n * tRPC router for embedding/RAG operations.\n * Provides search and indexing triggers for class content.\n */\nimport { z } from 'zod';\nimport { createTRPCRouter, protectedProcedure } from '../trpc.js';\nimport { searchEmbeddings } from '../services/embedding.js';\nimport { enqueueRunJob } from '../workers/queues.js';\nimport { prisma } from '../lib/prisma.js';\nimport { TRPCError } from '@trpc/server';\nimport type { EmbeddingSourceType } from '@prisma/client';\n\nconst sourceTypeEnum = z.enum([\n 'FILE', 'ASSIGNMENT', 'WORKSHEET', 'ANNOUNCEMENT',\n 'SECTION', 'DISCUSSION', 'SUBMISSION', 'SYLLABUS',\n]);\n\nexport const embeddingRouter = createTRPCRouter({\n /**\n * Semantic search over class materials.\n */\n search: protectedProcedure\n .input(z.object({\n classId: z.string(),\n query: z.string().min(1).max(500),\n limit: z.number().min(1).max(20).default(5),\n sourceTypes: z.array(sourceTypeEnum).optional(),\n }))\n .query(async ({ input, ctx }) => {\n const userInClass = await prisma.class.findFirst({\n where: {\n id: input.classId,\n OR: [\n { teachers: { some: { id: ctx.user!.id } } },\n { students: { some: { id: ctx.user!.id } } },\n ],\n },\n });\n\n if (!userInClass) {\n throw new TRPCError({ code: 'FORBIDDEN', message: 'Access denied' });\n }\n\n const results = await searchEmbeddings({\n classId: input.classId,\n query: input.query,\n limit: input.limit,\n sourceTypes: input.sourceTypes as EmbeddingSourceType[] | undefined,\n });\n\n return results;\n }),\n\n /**\n * Trigger re-indexing of a specific resource.\n * Teachers only.\n */\n reindex: protectedProcedure\n .input(z.object({\n classId: z.string(),\n sourceType: sourceTypeEnum,\n sourceId: z.string(),\n }))\n .mutation(async ({ input, ctx }) => {\n const teacherInClass = await prisma.class.findFirst({\n where: {\n id: input.classId,\n teachers: { some: { id: ctx.user!.id } },\n },\n });\n\n if (!teacherInClass) {\n throw new TRPCError({ code: 'FORBIDDEN', message: 'Teacher access required' });\n }\n\n const result = await enqueueRunJob('EMBED_CONTENT', {\n classId: input.classId,\n sourceType: input.sourceType,\n sourceId: input.sourceId,\n }, {\n classId: input.classId,\n userId: ctx.user!.id,\n });\n\n return { runJobId: result.runJobId };\n }),\n\n /**\n * Bulk index all content for a class.\n * Teachers only. Useful for initial setup.\n */\n indexAll: protectedProcedure\n .input(z.object({\n classId: z.string(),\n }))\n .mutation(async ({ input, ctx }) => {\n const teacherInClass = await prisma.class.findFirst({\n where: {\n id: input.classId,\n teachers: { some: { id: ctx.user!.id } },\n },\n });\n\n if (!teacherInClass) {\n throw new TRPCError({ code: 'FORBIDDEN', message: 'Teacher access required' });\n }\n\n const [assignments, worksheets, announcements, discussions, submissions, classData, classFiles] = await Promise.all([\n prisma.assignment.findMany({ where: { classId: input.classId }, select: { id: true } }),\n prisma.worksheet.findMany({ where: { classId: input.classId }, select: { id: true } }),\n prisma.announcement.findMany({ where: { classId: input.classId }, select: { id: true } }),\n prisma.discussion.findMany({ where: { classId: input.classId }, select: { id: true } }),\n prisma.submission.findMany({\n where: { assignment: { classId: input.classId }, gradeReceived: { not: null } },\n select: { id: true },\n }),\n prisma.class.findUnique({ where: { id: input.classId }, select: { syllabus: true } }),\n prisma.folder.findUnique({\n where: { classId: input.classId },\n select: { files: { select: { id: true }, where: { uploadStatus: 'COMPLETED' } } },\n }),\n ]);\n\n const jobs: Promise<unknown>[] = [];\n const opts = { classId: input.classId, userId: ctx.user!.id };\n\n for (const a of assignments) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'ASSIGNMENT', sourceId: a.id }, opts));\n }\n for (const w of worksheets) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'WORKSHEET', sourceId: w.id }, opts));\n }\n for (const ann of announcements) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'ANNOUNCEMENT', sourceId: ann.id }, opts));\n }\n for (const d of discussions) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'DISCUSSION', sourceId: d.id }, opts));\n }\n for (const s of submissions) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'SUBMISSION', sourceId: s.id }, opts));\n }\n if (classData?.syllabus) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'SYLLABUS', sourceId: input.classId }, opts));\n }\n const files = classFiles?.files ?? [];\n for (const f of files) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'FILE', sourceId: f.id }, opts));\n }\n\n await Promise.allSettled(jobs);\n\n return {\n queued: {\n assignments: assignments.length,\n worksheets: worksheets.length,\n announcements: announcements.length,\n discussions: discussions.length,\n submissions: submissions.length,\n syllabus: classData?.syllabus ? 1 : 0,\n files: files.length,\n },\n };\n }),\n});\n"],"names":[],"mappings":"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","debug_id":"6aa753e1-b0da-52b8-9e5c-afa887df290b"}
@@ -28,6 +28,8 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
28
28
  email: string;
29
29
  password: string;
30
30
  verified: boolean;
31
+ termsAcceptedAt: Date | null;
32
+ termsVersion: string | null;
31
33
  schoolId: string | null;
32
34
  } | null;
33
35
  class: ({
@@ -39,24 +41,24 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
39
41
  userId: string;
40
42
  }[];
41
43
  } & {
42
- name: string;
43
44
  id: string;
45
+ createdAt: Date;
46
+ updatedAt: Date;
47
+ name: string;
44
48
  description: string | null;
45
49
  logoId: string | null;
46
50
  subdomain: string | null;
47
- createdAt: Date;
48
- updatedAt: Date;
49
51
  }) | null;
50
52
  teachers: {
51
53
  id: string;
52
54
  }[];
53
55
  } & {
54
- name: string;
56
+ section: string;
55
57
  id: string;
58
+ name: string;
56
59
  schoolId: string | null;
57
- subject: string;
58
60
  color: string | null;
59
- section: string;
61
+ subject: string;
60
62
  syllabus: string | null;
61
63
  departmentId: string | null;
62
64
  discussionsEnabled: boolean;
@@ -65,36 +67,36 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
65
67
  }) | null;
66
68
  assignmentsAttached: {
67
69
  type: import(".prisma/client").$Enums.AssignmentType;
68
- id: string;
69
70
  section: {
70
- name: string;
71
71
  id: string;
72
+ name: string;
72
73
  } | null;
74
+ id: string;
73
75
  title: string;
74
- instructions: string;
75
76
  dueDate: Date;
76
- graded: boolean;
77
77
  maxGrade: number | null;
78
+ attachments: {
79
+ type: string;
80
+ id: string;
81
+ name: string;
82
+ }[];
83
+ instructions: string;
84
+ graded: boolean;
78
85
  weight: number;
79
86
  teacher: {
80
87
  id: string;
81
88
  username: string;
82
89
  };
83
- attachments: {
84
- type: string;
85
- name: string;
86
- id: string;
87
- }[];
88
90
  }[];
89
91
  } & {
90
- name: string | null;
91
92
  id: string;
92
93
  userId: string | null;
94
+ location: string | null;
95
+ name: string | null;
93
96
  color: string | null;
94
97
  classId: string | null;
95
98
  startTime: Date;
96
99
  endTime: Date;
97
- location: string | null;
98
100
  remarks: string | null;
99
101
  };
100
102
  };
@@ -104,26 +106,26 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
104
106
  input: {
105
107
  startTime: string;
106
108
  endTime: string;
109
+ location?: string | undefined;
107
110
  name?: string | undefined;
108
111
  color?: string | undefined;
109
112
  classId?: string | undefined;
110
- location?: string | undefined;
111
113
  remarks?: string | undefined;
112
114
  };
113
115
  output: {
114
116
  event: {
115
- name: string | null;
116
- id: string;
117
- userId: string | null;
118
117
  class: {
119
- name: string;
120
118
  id: string;
119
+ name: string;
121
120
  } | null;
121
+ id: string;
122
+ userId: string | null;
123
+ location: string | null;
124
+ name: string | null;
122
125
  color: string | null;
123
126
  classId: string | null;
124
127
  startTime: Date;
125
128
  endTime: Date;
126
- location: string | null;
127
129
  remarks: string | null;
128
130
  };
129
131
  };
@@ -135,23 +137,23 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
135
137
  data: {
136
138
  startTime: string;
137
139
  endTime: string;
140
+ location?: string | undefined;
138
141
  name?: string | undefined;
139
142
  color?: string | undefined;
140
143
  classId?: string | undefined;
141
- location?: string | undefined;
142
144
  remarks?: string | undefined;
143
145
  };
144
146
  };
145
147
  output: {
146
148
  event: {
147
- name: string | null;
148
149
  id: string;
149
150
  userId: string | null;
151
+ location: string | null;
152
+ name: string | null;
150
153
  color: string | null;
151
154
  classId: string | null;
152
155
  startTime: Date;
153
156
  endTime: Date;
154
- location: string | null;
155
157
  remarks: string | null;
156
158
  };
157
159
  };
@@ -174,27 +176,29 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
174
176
  output: {
175
177
  assignment: {
176
178
  section: {
177
- name: string;
178
179
  id: string;
180
+ name: string;
179
181
  } | null;
180
- teacher: {
181
- id: string;
182
- username: string;
183
- };
184
182
  attachments: {
185
183
  type: string;
186
- name: string;
187
184
  id: string;
185
+ name: string;
188
186
  }[];
187
+ teacher: {
188
+ id: string;
189
+ username: string;
190
+ };
189
191
  } & {
190
192
  type: import(".prisma/client").$Enums.AssignmentType;
191
193
  id: string;
192
194
  createdAt: Date | null;
193
195
  classId: string;
194
- modifiedAt: Date | null;
195
196
  title: string;
196
- instructions: string;
197
197
  dueDate: Date;
198
+ maxGrade: number | null;
199
+ eventId: string | null;
200
+ instructions: string;
201
+ modifiedAt: Date | null;
198
202
  teacherId: string;
199
203
  acceptFiles: boolean;
200
204
  acceptExtendedResponse: boolean;
@@ -203,11 +207,9 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
203
207
  aiPolicyLevel: number;
204
208
  sectionId: string | null;
205
209
  graded: boolean;
206
- maxGrade: number | null;
207
210
  weight: number;
208
211
  inProgress: boolean;
209
212
  template: boolean;
210
- eventId: string | null;
211
213
  markSchemeId: string | null;
212
214
  order: number | null;
213
215
  gradingBoundaryId: string | null;
@@ -223,27 +225,29 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
223
225
  output: {
224
226
  assignment: {
225
227
  section: {
226
- name: string;
227
228
  id: string;
229
+ name: string;
228
230
  } | null;
229
- teacher: {
230
- id: string;
231
- username: string;
232
- };
233
231
  attachments: {
234
232
  type: string;
235
- name: string;
236
233
  id: string;
234
+ name: string;
237
235
  }[];
236
+ teacher: {
237
+ id: string;
238
+ username: string;
239
+ };
238
240
  } & {
239
241
  type: import(".prisma/client").$Enums.AssignmentType;
240
242
  id: string;
241
243
  createdAt: Date | null;
242
244
  classId: string;
243
- modifiedAt: Date | null;
244
245
  title: string;
245
- instructions: string;
246
246
  dueDate: Date;
247
+ maxGrade: number | null;
248
+ eventId: string | null;
249
+ instructions: string;
250
+ modifiedAt: Date | null;
247
251
  teacherId: string;
248
252
  acceptFiles: boolean;
249
253
  acceptExtendedResponse: boolean;
@@ -252,11 +256,9 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
252
256
  aiPolicyLevel: number;
253
257
  sectionId: string | null;
254
258
  graded: boolean;
255
- maxGrade: number | null;
256
259
  weight: number;
257
260
  inProgress: boolean;
258
261
  template: boolean;
259
- eventId: string | null;
260
262
  markSchemeId: string | null;
261
263
  order: number | null;
262
264
  gradingBoundaryId: string | null;
@@ -271,26 +273,26 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
271
273
  output: {
272
274
  assignments: {
273
275
  type: import(".prisma/client").$Enums.AssignmentType;
274
- id: string;
275
276
  section: {
276
- name: string;
277
277
  id: string;
278
+ name: string;
278
279
  } | null;
280
+ id: string;
279
281
  title: string;
280
- instructions: string;
281
282
  dueDate: Date;
282
- graded: boolean;
283
283
  maxGrade: number | null;
284
+ attachments: {
285
+ type: string;
286
+ id: string;
287
+ name: string;
288
+ }[];
289
+ instructions: string;
290
+ graded: boolean;
284
291
  weight: number;
285
292
  teacher: {
286
293
  id: string;
287
294
  username: string;
288
295
  };
289
- attachments: {
290
- type: string;
291
- name: string;
292
- id: string;
293
- }[];
294
296
  }[];
295
297
  };
296
298
  meta: object;
@@ -1 +1 @@
1
- {"version":3,"file":"event.d.ts","sourceRoot":"/","sources":["routers/event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsBxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDtB,CAAC"}
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"/","sources":["routers/event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsBxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDtB,CAAC"}
@@ -46,12 +46,16 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
46
46
  } & {
47
47
  path: string;
48
48
  type: string;
49
- name: string;
50
49
  id: string;
51
50
  userId: string | null;
52
- folderId: string | null;
51
+ name: string;
53
52
  size: number | null;
54
53
  uploadedAt: Date | null;
54
+ assignmentId: string | null;
55
+ submissionId: string | null;
56
+ thumbnailId: string | null;
57
+ annotationId: string | null;
58
+ conversationId: string | null;
55
59
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
56
60
  uploadUrl: string | null;
57
61
  uploadExpiresAt: Date | null;
@@ -61,12 +65,8 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
61
65
  uploadRetryCount: number;
62
66
  isOrphaned: boolean;
63
67
  cleanupAt: Date | null;
64
- thumbnailId: string | null;
65
- assignmentId: string | null;
66
- submissionId: string | null;
67
- annotationId: string | null;
68
68
  classDraftId: string | null;
69
- conversationId: string | null;
69
+ folderId: string | null;
70
70
  messageId: string | null;
71
71
  announcementId: string | null;
72
72
  discussionId: string | null;
@@ -88,12 +88,16 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
88
88
  } & {
89
89
  path: string;
90
90
  type: string;
91
- name: string;
92
91
  id: string;
93
92
  userId: string | null;
94
- folderId: string | null;
93
+ name: string;
95
94
  size: number | null;
96
95
  uploadedAt: Date | null;
96
+ assignmentId: string | null;
97
+ submissionId: string | null;
98
+ thumbnailId: string | null;
99
+ annotationId: string | null;
100
+ conversationId: string | null;
97
101
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
98
102
  uploadUrl: string | null;
99
103
  uploadExpiresAt: Date | null;
@@ -103,12 +107,8 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
103
107
  uploadRetryCount: number;
104
108
  isOrphaned: boolean;
105
109
  cleanupAt: Date | null;
106
- thumbnailId: string | null;
107
- assignmentId: string | null;
108
- submissionId: string | null;
109
- annotationId: string | null;
110
110
  classDraftId: string | null;
111
- conversationId: string | null;
111
+ folderId: string | null;
112
112
  messageId: string | null;
113
113
  announcementId: string | null;
114
114
  discussionId: string | null;