@studious-lms/server 1.14.0 → 1.16.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.
- package/dist/lib/inferDocumentFormat.d.ts +10 -0
- package/dist/lib/inferDocumentFormat.d.ts.map +1 -0
- package/dist/lib/inferDocumentFormat.js +48 -0
- package/dist/lib/inferDocumentFormat.js.map +1 -0
- package/dist/models/announcement.d.ts +45 -45
- package/dist/models/assignment.d.ts +75 -75
- package/dist/models/class.d.ts +13 -13
- package/dist/models/comment.d.ts +6 -6
- package/dist/models/conversation.d.ts +23 -23
- package/dist/models/event.d.ts +18 -18
- package/dist/models/file.d.ts +9 -9
- package/dist/models/labChat.d.ts +4 -4
- package/dist/models/message.d.ts +13 -13
- package/dist/models/newtonChat.d.ts +3 -3
- package/dist/models/notification.d.ts +4 -4
- package/dist/models/worksheet.d.ts +121 -121
- package/dist/pipelines/aiLabChat.d.ts +7 -1
- package/dist/pipelines/aiLabChat.d.ts.map +1 -1
- package/dist/pipelines/aiLabChat.js +145 -67
- package/dist/pipelines/aiLabChat.js.map +1 -1
- package/dist/pipelines/aiLabChatContract.d.ts +34 -195
- package/dist/pipelines/aiLabChatContract.d.ts.map +1 -1
- package/dist/pipelines/aiLabChatContract.js +9 -19
- package/dist/pipelines/aiLabChatContract.js.map +1 -1
- package/dist/pipelines/gradeWorksheet.d.ts +6 -6
- package/dist/pipelines/gradeWorksheet.d.ts.map +1 -1
- package/dist/pipelines/gradeWorksheet.js +75 -36
- package/dist/pipelines/gradeWorksheet.js.map +1 -1
- package/dist/pipelines/labChatPrompt.d.ts +8 -3
- package/dist/pipelines/labChatPrompt.d.ts.map +1 -1
- package/dist/pipelines/labChatPrompt.js +49 -14
- package/dist/pipelines/labChatPrompt.js.map +1 -1
- package/dist/pipelines/pdfToWorksheet.d.ts +1 -1
- package/dist/routers/_app.d.ts +524 -516
- package/dist/routers/_app.d.ts.map +1 -1
- package/dist/routers/announcement.d.ts +40 -40
- package/dist/routers/assignment.d.ts +121 -121
- package/dist/routers/class.d.ts +8 -8
- package/dist/routers/comment.d.ts +5 -5
- package/dist/routers/conversation.d.ts +6 -6
- package/dist/routers/discussion.d.ts +3 -3
- package/dist/routers/embedding.d.ts +6 -2
- package/dist/routers/embedding.d.ts.map +1 -1
- package/dist/routers/embedding.js +44 -36
- package/dist/routers/embedding.js.map +1 -1
- package/dist/routers/event.d.ts +18 -18
- package/dist/routers/file.d.ts +2 -2
- package/dist/routers/labChat.d.ts +3 -3
- package/dist/routers/notifications.d.ts +4 -4
- package/dist/routers/search.d.ts +2 -2
- package/dist/routers/worksheet.d.ts +44 -44
- package/dist/routes/aiStream.d.ts.map +1 -1
- package/dist/routes/aiStream.js +41 -11
- package/dist/routes/aiStream.js.map +1 -1
- package/dist/seedDatabase.d.ts +1 -1
- package/dist/services/aiChatStream.d.ts +18 -0
- package/dist/services/aiChatStream.d.ts.map +1 -1
- package/dist/services/aiChatStream.js +81 -11
- package/dist/services/aiChatStream.js.map +1 -1
- package/dist/services/aiModifierTools.d.ts +0 -16
- package/dist/services/aiModifierTools.d.ts.map +1 -1
- package/dist/services/aiModifierTools.js +112 -3
- package/dist/services/aiModifierTools.js.map +1 -1
- package/dist/services/aiProposalTools.d.ts.map +1 -1
- package/dist/services/aiProposalTools.js +25 -25
- package/dist/services/aiProposalTools.js.map +1 -1
- package/dist/services/announcement.d.ts +34 -34
- package/dist/services/assignment.d.ts +111 -111
- package/dist/services/assignment.d.ts.map +1 -1
- package/dist/services/assignment.js +4 -2
- package/dist/services/assignment.js.map +1 -1
- package/dist/services/class.d.ts +6 -6
- package/dist/services/class.d.ts.map +1 -1
- package/dist/services/class.js +7 -3
- package/dist/services/class.js.map +1 -1
- package/dist/services/comment.d.ts +5 -5
- package/dist/services/conversation.d.ts +6 -6
- package/dist/services/discussion.d.ts.map +1 -1
- package/dist/services/discussion.js +9 -2
- package/dist/services/discussion.js.map +1 -1
- package/dist/services/embedding.d.ts +19 -1
- package/dist/services/embedding.d.ts.map +1 -1
- package/dist/services/embedding.js +154 -8
- package/dist/services/embedding.js.map +1 -1
- package/dist/services/event.d.ts +18 -18
- package/dist/services/file.d.ts +4 -4
- package/dist/services/folder.d.ts.map +1 -1
- package/dist/services/folder.js +32 -2
- package/dist/services/folder.js.map +1 -1
- package/dist/services/labChat.d.ts +3 -3
- package/dist/services/notification.d.ts +4 -4
- package/dist/services/openaiDocumentGen.d.ts +25 -0
- package/dist/services/openaiDocumentGen.d.ts.map +1 -0
- package/dist/services/openaiDocumentGen.js +195 -0
- package/dist/services/openaiDocumentGen.js.map +1 -0
- package/dist/services/search.d.ts +1 -1
- package/dist/services/search.d.ts.map +1 -1
- package/dist/services/search.js +27 -2
- package/dist/services/search.js.map +1 -1
- package/dist/services/worksheet.d.ts +66 -49
- package/dist/services/worksheet.d.ts.map +1 -1
- package/dist/services/worksheet.js +48 -3
- package/dist/services/worksheet.js.map +1 -1
- package/dist/workers/processors/embedContent.d.ts.map +1 -1
- package/dist/workers/processors/embedContent.js +16 -25
- package/dist/workers/processors/embedContent.js.map +1 -1
- package/package.json +1 -1
- package/prisma/migrations/20260610140000_expand_embedding_source_types/migration.sql +4 -0
- package/prisma/schema.prisma +3 -0
- package/src/lib/inferDocumentFormat.ts +58 -0
- package/src/pipelines/aiLabChat.ts +185 -74
- package/src/pipelines/aiLabChatContract.ts +7 -17
- package/src/pipelines/gradeWorksheet.ts +95 -38
- package/src/pipelines/labChatPrompt.ts +61 -14
- package/src/routers/embedding.ts +44 -39
- package/src/routes/aiStream.ts +47 -9
- package/src/services/aiChatStream.ts +103 -8
- package/src/services/aiModifierTools.ts +154 -1
- package/src/services/aiProposalTools.ts +26 -25
- package/src/services/assignment.ts +3 -0
- package/src/services/class.ts +7 -1
- package/src/services/discussion.ts +13 -0
- package/src/services/embedding.ts +167 -6
- package/src/services/folder.ts +31 -0
- package/src/services/openaiDocumentGen.ts +237 -0
- package/src/services/search.ts +25 -1
- package/src/services/worksheet.ts +68 -1
- package/src/workers/processors/embedContent.ts +18 -22
- package/tests/unit/lib/inferDocumentFormat.test.ts +33 -0
package/dist/routers/class.d.ts
CHANGED
|
@@ -359,7 +359,7 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
359
359
|
input: {
|
|
360
360
|
[x: string]: unknown;
|
|
361
361
|
classId: string;
|
|
362
|
-
type: "
|
|
362
|
+
type: "student" | "teacher";
|
|
363
363
|
userId: string;
|
|
364
364
|
};
|
|
365
365
|
output: {
|
|
@@ -377,7 +377,7 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
377
377
|
studentsCanReply: boolean;
|
|
378
378
|
};
|
|
379
379
|
user: {
|
|
380
|
-
type: "
|
|
380
|
+
type: "student" | "teacher";
|
|
381
381
|
id: string;
|
|
382
382
|
username: string;
|
|
383
383
|
};
|
|
@@ -479,8 +479,8 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
479
479
|
id: string;
|
|
480
480
|
createdAt: Date;
|
|
481
481
|
assignmentId: string;
|
|
482
|
-
modifiedAt: Date;
|
|
483
482
|
studentId: string;
|
|
483
|
+
modifiedAt: Date;
|
|
484
484
|
extendedResponse: string | null;
|
|
485
485
|
gradeReceived: number | null;
|
|
486
486
|
recommendationState: import(".prisma/client").$Enums.SubmissionRecommendationState;
|
|
@@ -515,8 +515,8 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
515
515
|
id: string;
|
|
516
516
|
createdAt: Date;
|
|
517
517
|
assignmentId: string;
|
|
518
|
-
modifiedAt: Date;
|
|
519
518
|
studentId: string;
|
|
519
|
+
modifiedAt: Date;
|
|
520
520
|
extendedResponse: string | null;
|
|
521
521
|
gradeReceived: number | null;
|
|
522
522
|
recommendationState: import(".prisma/client").$Enums.SubmissionRecommendationState;
|
|
@@ -744,7 +744,7 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
744
744
|
input: {
|
|
745
745
|
[x: string]: unknown;
|
|
746
746
|
classId: string;
|
|
747
|
-
type: "HOMEWORK" | "QUIZ" | "TEST" | "PROJECT" | "ESSAY" | "
|
|
747
|
+
type: "DISCUSSION" | "HOMEWORK" | "QUIZ" | "TEST" | "PROJECT" | "ESSAY" | "PRESENTATION" | "LAB" | "OTHER";
|
|
748
748
|
title: string;
|
|
749
749
|
instructions: string;
|
|
750
750
|
dueDate?: Date | undefined;
|
|
@@ -1017,11 +1017,11 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
1017
1017
|
type: import(".prisma/client").$Enums.WorksheetQuestionType;
|
|
1018
1018
|
options: import("@prisma/client/runtime/library.js").JsonValue;
|
|
1019
1019
|
markScheme: import("@prisma/client/runtime/library.js").JsonValue;
|
|
1020
|
-
|
|
1021
|
-
worksheetId: string;
|
|
1020
|
+
points: number;
|
|
1022
1021
|
question: string;
|
|
1022
|
+
worksheetId: string;
|
|
1023
|
+
order: number | null;
|
|
1023
1024
|
answer: string;
|
|
1024
|
-
points: number;
|
|
1025
1025
|
}[];
|
|
1026
1026
|
}[];
|
|
1027
1027
|
markSchemes: {
|
|
@@ -39,8 +39,8 @@ export declare const commentRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
39
39
|
content: string;
|
|
40
40
|
assignmentId: string | null;
|
|
41
41
|
submissionId: string | null;
|
|
42
|
-
modifiedAt: Date | null;
|
|
43
42
|
announcementId: string | null;
|
|
43
|
+
modifiedAt: Date | null;
|
|
44
44
|
isPinned: boolean;
|
|
45
45
|
author: {
|
|
46
46
|
id: string;
|
|
@@ -75,8 +75,8 @@ export declare const commentRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
75
75
|
content: string;
|
|
76
76
|
assignmentId: string | null;
|
|
77
77
|
submissionId: string | null;
|
|
78
|
-
modifiedAt: Date | null;
|
|
79
78
|
announcementId: string | null;
|
|
79
|
+
modifiedAt: Date | null;
|
|
80
80
|
authorId: string;
|
|
81
81
|
isPinned: boolean;
|
|
82
82
|
parentCommentId: string | null;
|
|
@@ -95,8 +95,8 @@ export declare const commentRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
95
95
|
content: string;
|
|
96
96
|
assignmentId: string | null;
|
|
97
97
|
submissionId: string | null;
|
|
98
|
-
modifiedAt: Date | null;
|
|
99
98
|
announcementId: string | null;
|
|
99
|
+
modifiedAt: Date | null;
|
|
100
100
|
authorId: string;
|
|
101
101
|
isPinned: boolean;
|
|
102
102
|
parentCommentId: string | null;
|
|
@@ -115,8 +115,8 @@ export declare const commentRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
115
115
|
content: string;
|
|
116
116
|
assignmentId: string | null;
|
|
117
117
|
submissionId: string | null;
|
|
118
|
-
modifiedAt: Date | null;
|
|
119
118
|
announcementId: string | null;
|
|
119
|
+
modifiedAt: Date | null;
|
|
120
120
|
authorId: string;
|
|
121
121
|
isPinned: boolean;
|
|
122
122
|
parentCommentId: string | null;
|
|
@@ -144,8 +144,8 @@ export declare const commentRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
144
144
|
content: string;
|
|
145
145
|
assignmentId: string | null;
|
|
146
146
|
submissionId: string | null;
|
|
147
|
-
modifiedAt: Date | null;
|
|
148
147
|
announcementId: string | null;
|
|
148
|
+
modifiedAt: Date | null;
|
|
149
149
|
authorId: string;
|
|
150
150
|
isPinned: boolean;
|
|
151
151
|
parentCommentId: string | null;
|
|
@@ -40,8 +40,8 @@ export declare const conversationRouter: import("@trpc/server").TRPCBuiltRouter<
|
|
|
40
40
|
} & {
|
|
41
41
|
id: string;
|
|
42
42
|
userId: string;
|
|
43
|
-
conversationId: string;
|
|
44
43
|
role: import(".prisma/client").$Enums.ConversationRole;
|
|
44
|
+
conversationId: string;
|
|
45
45
|
joinedAt: Date;
|
|
46
46
|
hiddenAt: Date | null;
|
|
47
47
|
lastViewedAt: Date | null;
|
|
@@ -61,9 +61,9 @@ export declare const conversationRouter: import("@trpc/server").TRPCBuiltRouter<
|
|
|
61
61
|
id: string;
|
|
62
62
|
createdAt: Date;
|
|
63
63
|
content: string;
|
|
64
|
+
senderId: string;
|
|
64
65
|
conversationId: string;
|
|
65
66
|
runJobId: string | null;
|
|
66
|
-
senderId: string;
|
|
67
67
|
};
|
|
68
68
|
unreadCount: number;
|
|
69
69
|
unreadMentionCount: number;
|
|
@@ -104,8 +104,8 @@ export declare const conversationRouter: import("@trpc/server").TRPCBuiltRouter<
|
|
|
104
104
|
} & {
|
|
105
105
|
id: string;
|
|
106
106
|
userId: string;
|
|
107
|
-
conversationId: string;
|
|
108
107
|
role: import(".prisma/client").$Enums.ConversationRole;
|
|
108
|
+
conversationId: string;
|
|
109
109
|
joinedAt: Date;
|
|
110
110
|
hiddenAt: Date | null;
|
|
111
111
|
lastViewedAt: Date | null;
|
|
@@ -138,8 +138,8 @@ export declare const conversationRouter: import("@trpc/server").TRPCBuiltRouter<
|
|
|
138
138
|
} & {
|
|
139
139
|
id: string;
|
|
140
140
|
userId: string;
|
|
141
|
-
conversationId: string;
|
|
142
141
|
role: import(".prisma/client").$Enums.ConversationRole;
|
|
142
|
+
conversationId: string;
|
|
143
143
|
joinedAt: Date;
|
|
144
144
|
hiddenAt: Date | null;
|
|
145
145
|
lastViewedAt: Date | null;
|
|
@@ -182,8 +182,8 @@ export declare const conversationRouter: import("@trpc/server").TRPCBuiltRouter<
|
|
|
182
182
|
} & {
|
|
183
183
|
id: string;
|
|
184
184
|
userId: string;
|
|
185
|
-
conversationId: string;
|
|
186
185
|
role: import(".prisma/client").$Enums.ConversationRole;
|
|
186
|
+
conversationId: string;
|
|
187
187
|
joinedAt: Date;
|
|
188
188
|
hiddenAt: Date | null;
|
|
189
189
|
lastViewedAt: Date | null;
|
|
@@ -217,8 +217,8 @@ export declare const conversationRouter: import("@trpc/server").TRPCBuiltRouter<
|
|
|
217
217
|
} & {
|
|
218
218
|
id: string;
|
|
219
219
|
userId: string;
|
|
220
|
-
conversationId: string;
|
|
221
220
|
role: import(".prisma/client").$Enums.ConversationRole;
|
|
221
|
+
conversationId: string;
|
|
222
222
|
joinedAt: Date;
|
|
223
223
|
hiddenAt: Date | null;
|
|
224
224
|
lastViewedAt: Date | null;
|
|
@@ -19,7 +19,7 @@ export declare const discussionRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
19
19
|
list: import("@trpc/server").TRPCQueryProcedure<{
|
|
20
20
|
input: {
|
|
21
21
|
classId: string;
|
|
22
|
-
type?: "
|
|
22
|
+
type?: "ANNOUNCEMENT" | "DISCUSSION" | "QUESTION" | undefined;
|
|
23
23
|
sort?: "recent" | "activity" | "top" | undefined;
|
|
24
24
|
cursor?: string | undefined;
|
|
25
25
|
search?: string | undefined;
|
|
@@ -165,7 +165,7 @@ export declare const discussionRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
165
165
|
classId: string;
|
|
166
166
|
title: string;
|
|
167
167
|
body: string;
|
|
168
|
-
type?: "
|
|
168
|
+
type?: "ANNOUNCEMENT" | "DISCUSSION" | "QUESTION" | undefined;
|
|
169
169
|
tagIds?: string[] | undefined;
|
|
170
170
|
attachmentIds?: string[] | undefined;
|
|
171
171
|
};
|
|
@@ -258,7 +258,7 @@ export declare const discussionRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
258
258
|
update: import("@trpc/server").TRPCMutationProcedure<{
|
|
259
259
|
input: {
|
|
260
260
|
discussionId: string;
|
|
261
|
-
type?: "
|
|
261
|
+
type?: "ANNOUNCEMENT" | "DISCUSSION" | "QUESTION" | undefined;
|
|
262
262
|
title?: string | undefined;
|
|
263
263
|
body?: string | undefined;
|
|
264
264
|
allowReplies?: boolean | undefined;
|
|
@@ -28,7 +28,7 @@ export declare const embeddingRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
28
28
|
query: string;
|
|
29
29
|
classId: string;
|
|
30
30
|
limit?: number | undefined;
|
|
31
|
-
sourceTypes?: ("
|
|
31
|
+
sourceTypes?: ("FILE" | "ASSIGNMENT" | "WORKSHEET" | "ANNOUNCEMENT" | "SECTION" | "DISCUSSION" | "SUBMISSION" | "SYLLABUS")[] | undefined;
|
|
32
32
|
};
|
|
33
33
|
output: import("../services/embedding.js").EmbeddingSearchResult[];
|
|
34
34
|
meta: object;
|
|
@@ -40,7 +40,7 @@ export declare const embeddingRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
40
40
|
reindex: import("@trpc/server").TRPCMutationProcedure<{
|
|
41
41
|
input: {
|
|
42
42
|
classId: string;
|
|
43
|
-
sourceType: "
|
|
43
|
+
sourceType: "FILE" | "ASSIGNMENT" | "WORKSHEET" | "ANNOUNCEMENT" | "SECTION" | "DISCUSSION" | "SUBMISSION" | "SYLLABUS";
|
|
44
44
|
sourceId: string;
|
|
45
45
|
};
|
|
46
46
|
output: {
|
|
@@ -61,6 +61,10 @@ export declare const embeddingRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
61
61
|
assignments: number;
|
|
62
62
|
worksheets: number;
|
|
63
63
|
announcements: number;
|
|
64
|
+
discussions: number;
|
|
65
|
+
submissions: number;
|
|
66
|
+
syllabus: number;
|
|
67
|
+
files: number;
|
|
64
68
|
};
|
|
65
69
|
};
|
|
66
70
|
meta: object;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.d.ts","sourceRoot":"/","sources":["routers/embedding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"embedding.d.ts","sourceRoot":"/","sources":["routers/embedding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;IAC1B;;OAEG;;;;;;;;;;;IAiCH;;;OAGG;;;;;;;;;;;;IA+BH;;;OAGG;;;;;;;;;;;;;;;;;;GAyEH,CAAC"}
|
|
@@ -3,13 +3,17 @@
|
|
|
3
3
|
* Provides search and indexing triggers for class content.
|
|
4
4
|
*/
|
|
5
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]="
|
|
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
7
|
import { z } from 'zod';
|
|
8
8
|
import { createTRPCRouter, protectedProcedure } from '../trpc.js';
|
|
9
9
|
import { searchEmbeddings } from '../services/embedding.js';
|
|
10
10
|
import { enqueueRunJob } from '../workers/queues.js';
|
|
11
11
|
import { prisma } from '../lib/prisma.js';
|
|
12
12
|
import { TRPCError } from '@trpc/server';
|
|
13
|
+
const sourceTypeEnum = z.enum([
|
|
14
|
+
'FILE', 'ASSIGNMENT', 'WORKSHEET', 'ANNOUNCEMENT',
|
|
15
|
+
'SECTION', 'DISCUSSION', 'SUBMISSION', 'SYLLABUS',
|
|
16
|
+
]);
|
|
13
17
|
export const embeddingRouter = createTRPCRouter({
|
|
14
18
|
/**
|
|
15
19
|
* Semantic search over class materials.
|
|
@@ -19,10 +23,9 @@ export const embeddingRouter = createTRPCRouter({
|
|
|
19
23
|
classId: z.string(),
|
|
20
24
|
query: z.string().min(1).max(500),
|
|
21
25
|
limit: z.number().min(1).max(20).default(5),
|
|
22
|
-
sourceTypes: z.array(
|
|
26
|
+
sourceTypes: z.array(sourceTypeEnum).optional(),
|
|
23
27
|
}))
|
|
24
28
|
.query(async ({ input, ctx }) => {
|
|
25
|
-
// Verify user has access to the class
|
|
26
29
|
const userInClass = await prisma.class.findFirst({
|
|
27
30
|
where: {
|
|
28
31
|
id: input.classId,
|
|
@@ -50,11 +53,10 @@ export const embeddingRouter = createTRPCRouter({
|
|
|
50
53
|
reindex: protectedProcedure
|
|
51
54
|
.input(z.object({
|
|
52
55
|
classId: z.string(),
|
|
53
|
-
sourceType:
|
|
56
|
+
sourceType: sourceTypeEnum,
|
|
54
57
|
sourceId: z.string(),
|
|
55
58
|
}))
|
|
56
59
|
.mutation(async ({ input, ctx }) => {
|
|
57
|
-
// Verify teacher access
|
|
58
60
|
const teacherInClass = await prisma.class.findFirst({
|
|
59
61
|
where: {
|
|
60
62
|
id: input.classId,
|
|
@@ -92,42 +94,44 @@ export const embeddingRouter = createTRPCRouter({
|
|
|
92
94
|
if (!teacherInClass) {
|
|
93
95
|
throw new TRPCError({ code: 'FORBIDDEN', message: 'Teacher access required' });
|
|
94
96
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
where: { classId: input.classId },
|
|
98
|
-
select: { id: true },
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
+
]);
|
|
110
112
|
const jobs = [];
|
|
113
|
+
const opts = { classId: input.classId, userId: ctx.user.id };
|
|
111
114
|
for (const a of assignments) {
|
|
112
|
-
jobs.push(enqueueRunJob('EMBED_CONTENT', {
|
|
113
|
-
classId: input.classId,
|
|
114
|
-
sourceType: 'ASSIGNMENT',
|
|
115
|
-
sourceId: a.id,
|
|
116
|
-
}, { classId: input.classId, userId: ctx.user.id }));
|
|
115
|
+
jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'ASSIGNMENT', sourceId: a.id }, opts));
|
|
117
116
|
}
|
|
118
117
|
for (const w of worksheets) {
|
|
119
|
-
jobs.push(enqueueRunJob('EMBED_CONTENT', {
|
|
120
|
-
classId: input.classId,
|
|
121
|
-
sourceType: 'WORKSHEET',
|
|
122
|
-
sourceId: w.id,
|
|
123
|
-
}, { classId: input.classId, userId: ctx.user.id }));
|
|
118
|
+
jobs.push(enqueueRunJob('EMBED_CONTENT', { classId: input.classId, sourceType: 'WORKSHEET', sourceId: w.id }, opts));
|
|
124
119
|
}
|
|
125
120
|
for (const ann of announcements) {
|
|
126
|
-
jobs.push(enqueueRunJob('EMBED_CONTENT', {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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));
|
|
131
135
|
}
|
|
132
136
|
await Promise.allSettled(jobs);
|
|
133
137
|
return {
|
|
@@ -135,9 +139,13 @@ export const embeddingRouter = createTRPCRouter({
|
|
|
135
139
|
assignments: assignments.length,
|
|
136
140
|
worksheets: worksheets.length,
|
|
137
141
|
announcements: announcements.length,
|
|
142
|
+
discussions: discussions.length,
|
|
143
|
+
submissions: submissions.length,
|
|
144
|
+
syllabus: classData?.syllabus ? 1 : 0,
|
|
145
|
+
files: files.length,
|
|
138
146
|
},
|
|
139
147
|
};
|
|
140
148
|
}),
|
|
141
149
|
});
|
|
142
150
|
//# sourceMappingURL=embedding.js.map
|
|
143
|
-
//# debugId=
|
|
151
|
+
//# debugId=6aa753e1-b0da-52b8-9e5c-afa887df290b
|
|
@@ -1 +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, indexAssignment, indexWorksheet, indexAnnouncement } 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\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(z.enum(['FILE', 'ASSIGNMENT', 'WORKSHEET', 'ANNOUNCEMENT', 'SECTION'])).optional(),\n }))\n .query(async ({ input, ctx }) => {\n // Verify user has access to the class\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: z.enum(['FILE', 'ASSIGNMENT', 'WORKSHEET', 'ANNOUNCEMENT', 'SECTION']),\n sourceId: z.string(),\n }))\n .mutation(async ({ input, ctx }) => {\n // Verify teacher access\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 // Enqueue all assignments\n const assignments = await prisma.assignment.findMany({\n where: { classId: input.classId },\n select: { id: true },\n });\n\n // Enqueue all worksheets\n const worksheets = await prisma.worksheet.findMany({\n where: { classId: input.classId },\n select: { id: true },\n });\n\n // Enqueue all announcements\n const announcements = await prisma.announcement.findMany({\n where: { classId: input.classId },\n select: { id: true },\n });\n\n const jobs: Promise<unknown>[] = [];\n\n for (const a of assignments) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', {\n classId: input.classId,\n sourceType: 'ASSIGNMENT',\n sourceId: a.id,\n }, { classId: input.classId, userId: ctx.user!.id }));\n }\n\n for (const w of worksheets) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', {\n classId: input.classId,\n sourceType: 'WORKSHEET',\n sourceId: w.id,\n }, { classId: input.classId, userId: ctx.user!.id }));\n }\n\n for (const ann of announcements) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', {\n classId: input.classId,\n sourceType: 'ANNOUNCEMENT',\n sourceId: ann.id,\n }, { classId: input.classId, userId: ctx.user!.id }));\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 },\n };\n }),\n});\n"],"names":[],"mappings":"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","debug_id":"2a73cd21-6669-5303-82a8-94d941a432bd"}
|
|
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"}
|
package/dist/routers/event.d.ts
CHANGED
|
@@ -73,6 +73,11 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
73
73
|
title: string;
|
|
74
74
|
dueDate: Date;
|
|
75
75
|
maxGrade: number | null;
|
|
76
|
+
attachments: {
|
|
77
|
+
type: string;
|
|
78
|
+
id: string;
|
|
79
|
+
name: string;
|
|
80
|
+
}[];
|
|
76
81
|
instructions: string;
|
|
77
82
|
graded: boolean;
|
|
78
83
|
weight: number;
|
|
@@ -80,11 +85,6 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
80
85
|
id: string;
|
|
81
86
|
username: string;
|
|
82
87
|
};
|
|
83
|
-
attachments: {
|
|
84
|
-
type: string;
|
|
85
|
-
id: string;
|
|
86
|
-
name: string;
|
|
87
|
-
}[];
|
|
88
88
|
}[];
|
|
89
89
|
} & {
|
|
90
90
|
id: string;
|
|
@@ -177,15 +177,15 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
177
177
|
id: string;
|
|
178
178
|
name: string;
|
|
179
179
|
} | null;
|
|
180
|
-
teacher: {
|
|
181
|
-
id: string;
|
|
182
|
-
username: string;
|
|
183
|
-
};
|
|
184
180
|
attachments: {
|
|
185
181
|
type: string;
|
|
186
182
|
id: string;
|
|
187
183
|
name: string;
|
|
188
184
|
}[];
|
|
185
|
+
teacher: {
|
|
186
|
+
id: string;
|
|
187
|
+
username: string;
|
|
188
|
+
};
|
|
189
189
|
} & {
|
|
190
190
|
type: import(".prisma/client").$Enums.AssignmentType;
|
|
191
191
|
id: string;
|
|
@@ -226,15 +226,15 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
226
226
|
id: string;
|
|
227
227
|
name: string;
|
|
228
228
|
} | null;
|
|
229
|
-
teacher: {
|
|
230
|
-
id: string;
|
|
231
|
-
username: string;
|
|
232
|
-
};
|
|
233
229
|
attachments: {
|
|
234
230
|
type: string;
|
|
235
231
|
id: string;
|
|
236
232
|
name: string;
|
|
237
233
|
}[];
|
|
234
|
+
teacher: {
|
|
235
|
+
id: string;
|
|
236
|
+
username: string;
|
|
237
|
+
};
|
|
238
238
|
} & {
|
|
239
239
|
type: import(".prisma/client").$Enums.AssignmentType;
|
|
240
240
|
id: string;
|
|
@@ -279,6 +279,11 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
279
279
|
title: string;
|
|
280
280
|
dueDate: Date;
|
|
281
281
|
maxGrade: number | null;
|
|
282
|
+
attachments: {
|
|
283
|
+
type: string;
|
|
284
|
+
id: string;
|
|
285
|
+
name: string;
|
|
286
|
+
}[];
|
|
282
287
|
instructions: string;
|
|
283
288
|
graded: boolean;
|
|
284
289
|
weight: number;
|
|
@@ -286,11 +291,6 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
286
291
|
id: string;
|
|
287
292
|
username: string;
|
|
288
293
|
};
|
|
289
|
-
attachments: {
|
|
290
|
-
type: string;
|
|
291
|
-
id: string;
|
|
292
|
-
name: string;
|
|
293
|
-
}[];
|
|
294
294
|
}[];
|
|
295
295
|
};
|
|
296
296
|
meta: object;
|
package/dist/routers/file.d.ts
CHANGED
|
@@ -55,6 +55,7 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
55
55
|
submissionId: string | null;
|
|
56
56
|
thumbnailId: string | null;
|
|
57
57
|
annotationId: string | null;
|
|
58
|
+
conversationId: string | null;
|
|
58
59
|
uploadStatus: import(".prisma/client").$Enums.UploadStatus;
|
|
59
60
|
uploadUrl: string | null;
|
|
60
61
|
uploadExpiresAt: Date | null;
|
|
@@ -66,7 +67,6 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
66
67
|
cleanupAt: Date | null;
|
|
67
68
|
classDraftId: string | null;
|
|
68
69
|
folderId: string | null;
|
|
69
|
-
conversationId: string | null;
|
|
70
70
|
messageId: string | null;
|
|
71
71
|
announcementId: string | null;
|
|
72
72
|
discussionId: string | null;
|
|
@@ -97,6 +97,7 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
97
97
|
submissionId: string | null;
|
|
98
98
|
thumbnailId: string | null;
|
|
99
99
|
annotationId: string | null;
|
|
100
|
+
conversationId: string | null;
|
|
100
101
|
uploadStatus: import(".prisma/client").$Enums.UploadStatus;
|
|
101
102
|
uploadUrl: string | null;
|
|
102
103
|
uploadExpiresAt: Date | null;
|
|
@@ -108,7 +109,6 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
108
109
|
cleanupAt: Date | null;
|
|
109
110
|
classDraftId: string | null;
|
|
110
111
|
folderId: string | null;
|
|
111
|
-
conversationId: string | null;
|
|
112
112
|
messageId: string | null;
|
|
113
113
|
announcementId: string | null;
|
|
114
114
|
discussionId: string | null;
|
|
@@ -42,8 +42,8 @@ export declare const labChatRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
42
42
|
} & {
|
|
43
43
|
id: string;
|
|
44
44
|
userId: string;
|
|
45
|
-
conversationId: string;
|
|
46
45
|
role: import(".prisma/client").$Enums.ConversationRole;
|
|
46
|
+
conversationId: string;
|
|
47
47
|
joinedAt: Date;
|
|
48
48
|
hiddenAt: Date | null;
|
|
49
49
|
lastViewedAt: Date | null;
|
|
@@ -101,8 +101,8 @@ export declare const labChatRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
101
101
|
} & {
|
|
102
102
|
id: string;
|
|
103
103
|
userId: string;
|
|
104
|
-
conversationId: string;
|
|
105
104
|
role: import(".prisma/client").$Enums.ConversationRole;
|
|
105
|
+
conversationId: string;
|
|
106
106
|
joinedAt: Date;
|
|
107
107
|
hiddenAt: Date | null;
|
|
108
108
|
lastViewedAt: Date | null;
|
|
@@ -167,9 +167,9 @@ export declare const labChatRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
167
167
|
id: string;
|
|
168
168
|
createdAt: Date;
|
|
169
169
|
content: string;
|
|
170
|
+
senderId: string;
|
|
170
171
|
conversationId: string;
|
|
171
172
|
runJobId: string | null;
|
|
172
|
-
senderId: string;
|
|
173
173
|
};
|
|
174
174
|
messageCount: number;
|
|
175
175
|
}[];
|
|
@@ -30,9 +30,9 @@ export declare const notificationRouter: import("@trpc/server").TRPCBuiltRouter<
|
|
|
30
30
|
createdAt: Date;
|
|
31
31
|
title: string;
|
|
32
32
|
content: string;
|
|
33
|
+
senderId: string | null;
|
|
33
34
|
read: boolean;
|
|
34
35
|
receiverId: string;
|
|
35
|
-
senderId: string | null;
|
|
36
36
|
})[];
|
|
37
37
|
meta: object;
|
|
38
38
|
}>;
|
|
@@ -52,9 +52,9 @@ export declare const notificationRouter: import("@trpc/server").TRPCBuiltRouter<
|
|
|
52
52
|
createdAt: Date;
|
|
53
53
|
title: string;
|
|
54
54
|
content: string;
|
|
55
|
+
senderId: string | null;
|
|
55
56
|
read: boolean;
|
|
56
57
|
receiverId: string;
|
|
57
|
-
senderId: string | null;
|
|
58
58
|
};
|
|
59
59
|
meta: object;
|
|
60
60
|
}>;
|
|
@@ -69,9 +69,9 @@ export declare const notificationRouter: import("@trpc/server").TRPCBuiltRouter<
|
|
|
69
69
|
createdAt: Date;
|
|
70
70
|
title: string;
|
|
71
71
|
content: string;
|
|
72
|
+
senderId: string | null;
|
|
72
73
|
read: boolean;
|
|
73
74
|
receiverId: string;
|
|
74
|
-
senderId: string | null;
|
|
75
75
|
};
|
|
76
76
|
meta: object;
|
|
77
77
|
}>;
|
|
@@ -100,9 +100,9 @@ export declare const notificationRouter: import("@trpc/server").TRPCBuiltRouter<
|
|
|
100
100
|
createdAt: Date;
|
|
101
101
|
title: string;
|
|
102
102
|
content: string;
|
|
103
|
+
senderId: string | null;
|
|
103
104
|
read: boolean;
|
|
104
105
|
receiverId: string;
|
|
105
|
-
senderId: string | null;
|
|
106
106
|
};
|
|
107
107
|
meta: object;
|
|
108
108
|
}>;
|
package/dist/routers/search.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export declare const searchRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
25
25
|
query: string;
|
|
26
26
|
results: {
|
|
27
27
|
id: string;
|
|
28
|
-
type: "class" | "file" | "assignment" | "announcement" | "section" | "event" | "worksheet" | "syllabus";
|
|
28
|
+
type: "class" | "file" | "assignment" | "announcement" | "discussion" | "submission" | "section" | "event" | "worksheet" | "syllabus";
|
|
29
29
|
title: string;
|
|
30
30
|
subtitle: string;
|
|
31
31
|
classId: string;
|
|
@@ -46,7 +46,7 @@ export declare const searchRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
|
46
46
|
query: string;
|
|
47
47
|
results: {
|
|
48
48
|
id: string;
|
|
49
|
-
type: "class" | "file" | "assignment" | "announcement" | "section" | "event" | "worksheet" | "syllabus";
|
|
49
|
+
type: "class" | "file" | "assignment" | "announcement" | "discussion" | "submission" | "section" | "event" | "worksheet" | "syllabus";
|
|
50
50
|
title: string;
|
|
51
51
|
subtitle: string;
|
|
52
52
|
classId: string;
|