@studious-lms/server 1.4.6 → 1.4.7
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/models/access.d.ts +112 -0
- package/dist/models/access.d.ts.map +1 -0
- package/dist/models/access.js +49 -0
- package/dist/models/access.js.map +1 -0
- package/dist/models/announcement.d.ts +17 -2
- package/dist/models/announcement.d.ts.map +1 -1
- package/dist/models/announcement.js +21 -4
- package/dist/models/announcement.js.map +1 -1
- package/dist/models/assignment.d.ts +37 -37
- package/dist/models/assignment.d.ts.map +1 -1
- package/dist/models/assignment.js +15 -15
- package/dist/models/assignment.js.map +1 -1
- package/dist/models/attendance.d.ts +1 -1
- package/dist/models/attendance.d.ts.map +1 -1
- package/dist/models/attendance.js +6 -5
- package/dist/models/attendance.js.map +1 -1
- package/dist/models/auth.d.ts +5 -5
- package/dist/models/auth.d.ts.map +1 -1
- package/dist/models/auth.js +7 -11
- package/dist/models/auth.js.map +1 -1
- package/dist/models/class.d.ts +26 -26
- package/dist/models/class.d.ts.map +1 -1
- package/dist/models/class.js +7 -11
- package/dist/models/class.js.map +1 -1
- package/dist/models/comment.d.ts +134 -70
- package/dist/models/comment.d.ts.map +1 -1
- package/dist/models/comment.js +30 -42
- package/dist/models/comment.js.map +1 -1
- package/dist/models/conversation.d.ts +7 -7
- package/dist/models/event.d.ts +52 -3
- package/dist/models/event.d.ts.map +1 -1
- package/dist/models/event.js +56 -6
- package/dist/models/event.js.map +1 -1
- package/dist/models/file.d.ts +178 -103
- package/dist/models/file.d.ts.map +1 -1
- package/dist/models/file.js +54 -14
- package/dist/models/file.js.map +1 -1
- package/dist/models/folder.d.ts +22 -22
- package/dist/models/folder.d.ts.map +1 -1
- package/dist/models/folder.js +5 -4
- package/dist/models/folder.js.map +1 -1
- package/dist/models/labChat.d.ts +20 -20
- package/dist/models/labChat.d.ts.map +1 -1
- package/dist/models/labChat.js +8 -10
- package/dist/models/labChat.js.map +1 -1
- package/dist/models/marketing.d.ts +1 -1
- package/dist/models/message.d.ts +6 -6
- package/dist/models/newtonChat.d.ts +5 -5
- package/dist/models/school.d.ts +361 -0
- package/dist/models/school.d.ts.map +1 -0
- package/dist/models/school.js +314 -0
- package/dist/models/school.js.map +1 -0
- package/dist/models/section.d.ts +1 -1
- package/dist/models/section.d.ts.map +1 -1
- package/dist/models/section.js +5 -4
- package/dist/models/section.js.map +1 -1
- package/dist/models/user.d.ts +4 -4
- package/dist/models/worksheet.d.ts +65 -65
- package/dist/models/worksheet.d.ts.map +1 -1
- package/dist/models/worksheet.js +6 -14
- package/dist/models/worksheet.js.map +1 -1
- package/dist/pipelines/gradeWorksheet.d.ts +2 -2
- package/dist/pipelines/pdfToWorksheet.d.ts +1 -1
- package/dist/routers/_app.d.ts +2855 -2051
- package/dist/routers/_app.d.ts.map +1 -1
- package/dist/routers/_app.js +4 -2
- package/dist/routers/_app.js.map +1 -1
- package/dist/routers/announcement.d.ts +5 -5
- package/dist/routers/announcement.d.ts.map +1 -1
- package/dist/routers/announcement.js +25 -5
- package/dist/routers/announcement.js.map +1 -1
- package/dist/routers/assignment.d.ts +44 -44
- package/dist/routers/assignment.d.ts.map +1 -1
- package/dist/routers/assignment.js +24 -11
- package/dist/routers/assignment.js.map +1 -1
- package/dist/routers/class.d.ts +21 -20
- package/dist/routers/class.d.ts.map +1 -1
- package/dist/routers/class.js +3 -2
- package/dist/routers/class.js.map +1 -1
- package/dist/routers/comment.d.ts +5 -5
- package/dist/routers/conversation.d.ts +6 -6
- package/dist/routers/event.d.ts +21 -2
- package/dist/routers/event.d.ts.map +1 -1
- package/dist/routers/file.d.ts +2 -2
- package/dist/routers/folder.d.ts +24 -24
- package/dist/routers/labChat.d.ts +7 -7
- package/dist/routers/school.d.ts +384 -0
- package/dist/routers/school.d.ts.map +1 -0
- package/dist/routers/school.js +79 -0
- package/dist/routers/school.js.map +1 -0
- package/dist/routers/search.d.ts +1 -1
- package/dist/routers/worksheet.d.ts +21 -21
- package/dist/services/announcement.d.ts.map +1 -1
- package/dist/services/announcement.js +10 -6
- package/dist/services/announcement.js.map +1 -1
- package/dist/services/assignment.d.ts +36 -36
- package/dist/services/class.d.ts +20 -19
- package/dist/services/class.d.ts.map +1 -1
- package/dist/services/class.js +22 -3
- package/dist/services/class.js.map +1 -1
- package/dist/services/comment.d.ts +5 -5
- package/dist/services/comment.d.ts.map +1 -1
- package/dist/services/comment.js +8 -3
- package/dist/services/comment.js.map +1 -1
- package/dist/services/conversation.d.ts +6 -6
- package/dist/services/event.d.ts +21 -2
- package/dist/services/event.d.ts.map +1 -1
- package/dist/services/event.js +11 -7
- package/dist/services/event.js.map +1 -1
- package/dist/services/file.d.ts +2 -2
- package/dist/services/file.d.ts.map +1 -1
- package/dist/services/file.js +17 -8
- package/dist/services/file.js.map +1 -1
- package/dist/services/folder.d.ts +24 -24
- package/dist/services/labChat.d.ts +7 -7
- package/dist/services/school.d.ts +299 -0
- package/dist/services/school.d.ts.map +1 -0
- package/dist/services/school.js +225 -0
- package/dist/services/school.js.map +1 -0
- package/dist/services/worksheet.d.ts +21 -21
- package/package.json +1 -1
- package/prisma/migrations/20260504071500_school_memberships/migration.sql +81 -0
- package/prisma/schema.prisma +66 -2
- package/src/models/access.ts +48 -0
- package/src/models/announcement.ts +19 -2
- package/src/models/assignment.ts +17 -13
- package/src/models/attendance.ts +4 -3
- package/src/models/auth.ts +8 -9
- package/src/models/class.ts +8 -9
- package/src/models/comment.ts +29 -40
- package/src/models/event.ts +54 -4
- package/src/models/file.ts +53 -12
- package/src/models/folder.ts +3 -2
- package/src/models/labChat.ts +9 -8
- package/src/models/school.ts +361 -0
- package/src/models/section.ts +3 -2
- package/src/models/worksheet.ts +7 -12
- package/src/routers/_app.ts +2 -0
- package/src/routers/announcement.ts +30 -4
- package/src/routers/assignment.ts +27 -9
- package/src/routers/class.ts +1 -0
- package/src/routers/school.ts +122 -0
- package/src/services/announcement.ts +12 -4
- package/src/services/class.ts +25 -2
- package/src/services/comment.ts +10 -1
- package/src/services/event.ts +23 -6
- package/src/services/file.ts +20 -6
- package/src/services/school.ts +308 -0
package/src/models/comment.ts
CHANGED
|
@@ -46,6 +46,27 @@ export const commentSelect = {
|
|
|
46
46
|
},
|
|
47
47
|
} as const;
|
|
48
48
|
|
|
49
|
+
const commentClassAuthSelect = {
|
|
50
|
+
id: true,
|
|
51
|
+
teachers: { select: { id: true } },
|
|
52
|
+
students: { select: { id: true } },
|
|
53
|
+
school: {
|
|
54
|
+
select: {
|
|
55
|
+
users: {
|
|
56
|
+
where: { role: "ADMIN" as const },
|
|
57
|
+
select: { id: true },
|
|
58
|
+
},
|
|
59
|
+
memberships: {
|
|
60
|
+
where: {
|
|
61
|
+
role: "ADMIN" as const,
|
|
62
|
+
status: "ACTIVE" as const,
|
|
63
|
+
},
|
|
64
|
+
select: { userId: true },
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
} as const;
|
|
69
|
+
|
|
49
70
|
/** @returns Comment by ID with author and reactions. */
|
|
50
71
|
export function findCommentById(id: string) {
|
|
51
72
|
return prisma.comment.findUnique({
|
|
@@ -158,22 +179,14 @@ export function findCommentWithContext(commentId: string) {
|
|
|
158
179
|
announcement: {
|
|
159
180
|
select: {
|
|
160
181
|
class: {
|
|
161
|
-
select:
|
|
162
|
-
id: true,
|
|
163
|
-
teachers: { select: { id: true } },
|
|
164
|
-
students: { select: { id: true } },
|
|
165
|
-
},
|
|
182
|
+
select: commentClassAuthSelect,
|
|
166
183
|
},
|
|
167
184
|
},
|
|
168
185
|
},
|
|
169
186
|
assignment: {
|
|
170
187
|
select: {
|
|
171
188
|
class: {
|
|
172
|
-
select:
|
|
173
|
-
id: true,
|
|
174
|
-
teachers: { select: { id: true } },
|
|
175
|
-
students: { select: { id: true } },
|
|
176
|
-
},
|
|
189
|
+
select: commentClassAuthSelect,
|
|
177
190
|
},
|
|
178
191
|
},
|
|
179
192
|
},
|
|
@@ -183,11 +196,7 @@ export function findCommentWithContext(commentId: string) {
|
|
|
183
196
|
assignment: {
|
|
184
197
|
select: {
|
|
185
198
|
class: {
|
|
186
|
-
select:
|
|
187
|
-
id: true,
|
|
188
|
-
teachers: { select: { id: true } },
|
|
189
|
-
students: { select: { id: true } },
|
|
190
|
-
},
|
|
199
|
+
select: commentClassAuthSelect,
|
|
191
200
|
},
|
|
192
201
|
},
|
|
193
202
|
},
|
|
@@ -204,11 +213,7 @@ export function findCommentWithContext(commentId: string) {
|
|
|
204
213
|
assignment: {
|
|
205
214
|
select: {
|
|
206
215
|
class: {
|
|
207
|
-
select:
|
|
208
|
-
id: true,
|
|
209
|
-
teachers: { select: { id: true } },
|
|
210
|
-
students: { select: { id: true } },
|
|
211
|
-
},
|
|
216
|
+
select: commentClassAuthSelect,
|
|
212
217
|
},
|
|
213
218
|
},
|
|
214
219
|
},
|
|
@@ -223,22 +228,14 @@ export function findCommentWithContext(commentId: string) {
|
|
|
223
228
|
announcement: {
|
|
224
229
|
select: {
|
|
225
230
|
class: {
|
|
226
|
-
select:
|
|
227
|
-
id: true,
|
|
228
|
-
teachers: { select: { id: true } },
|
|
229
|
-
students: { select: { id: true } },
|
|
230
|
-
},
|
|
231
|
+
select: commentClassAuthSelect,
|
|
231
232
|
},
|
|
232
233
|
},
|
|
233
234
|
},
|
|
234
235
|
assignment: {
|
|
235
236
|
select: {
|
|
236
237
|
class: {
|
|
237
|
-
select:
|
|
238
|
-
id: true,
|
|
239
|
-
teachers: { select: { id: true } },
|
|
240
|
-
students: { select: { id: true } },
|
|
241
|
-
},
|
|
238
|
+
select: commentClassAuthSelect,
|
|
242
239
|
},
|
|
243
240
|
},
|
|
244
241
|
},
|
|
@@ -248,11 +245,7 @@ export function findCommentWithContext(commentId: string) {
|
|
|
248
245
|
assignment: {
|
|
249
246
|
select: {
|
|
250
247
|
class: {
|
|
251
|
-
select:
|
|
252
|
-
id: true,
|
|
253
|
-
teachers: { select: { id: true } },
|
|
254
|
-
students: { select: { id: true } },
|
|
255
|
-
},
|
|
248
|
+
select: commentClassAuthSelect,
|
|
256
249
|
},
|
|
257
250
|
},
|
|
258
251
|
},
|
|
@@ -269,11 +262,7 @@ export function findCommentWithContext(commentId: string) {
|
|
|
269
262
|
assignment: {
|
|
270
263
|
select: {
|
|
271
264
|
class: {
|
|
272
|
-
select:
|
|
273
|
-
id: true,
|
|
274
|
-
teachers: { select: { id: true } },
|
|
275
|
-
students: { select: { id: true } },
|
|
276
|
-
},
|
|
265
|
+
select: commentClassAuthSelect,
|
|
277
266
|
},
|
|
278
267
|
},
|
|
279
268
|
},
|
package/src/models/event.ts
CHANGED
|
@@ -2,9 +2,29 @@
|
|
|
2
2
|
* Event model – calendar events, assignment attachment/detachment.
|
|
3
3
|
*/
|
|
4
4
|
import { prisma } from "../lib/prisma.js";
|
|
5
|
+
import { classTeacherOrSchoolAdminWhere } from "./access.js";
|
|
5
6
|
|
|
6
7
|
const eventGetInclude = {
|
|
7
|
-
class:
|
|
8
|
+
class: {
|
|
9
|
+
include: {
|
|
10
|
+
teachers: { select: { id: true } },
|
|
11
|
+
school: {
|
|
12
|
+
include: {
|
|
13
|
+
users: {
|
|
14
|
+
where: { role: "ADMIN" as const },
|
|
15
|
+
select: { id: true },
|
|
16
|
+
},
|
|
17
|
+
memberships: {
|
|
18
|
+
where: {
|
|
19
|
+
role: "ADMIN" as const,
|
|
20
|
+
status: "ACTIVE" as const,
|
|
21
|
+
},
|
|
22
|
+
select: { userId: true },
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
8
28
|
user: true,
|
|
9
29
|
assignmentsAttached: {
|
|
10
30
|
select: {
|
|
@@ -50,12 +70,12 @@ export function findEventById(id: string) {
|
|
|
50
70
|
});
|
|
51
71
|
}
|
|
52
72
|
|
|
53
|
-
/** @returns Class if user is a teacher. */
|
|
73
|
+
/** @returns Class if user is a teacher or school admin. */
|
|
54
74
|
export function findClassWithTeachers(classId: string, teacherId: string) {
|
|
55
|
-
return prisma.class.
|
|
75
|
+
return prisma.class.findFirst({
|
|
56
76
|
where: {
|
|
57
77
|
id: classId,
|
|
58
|
-
|
|
78
|
+
...classTeacherOrSchoolAdminWhere(teacherId),
|
|
59
79
|
},
|
|
60
80
|
});
|
|
61
81
|
}
|
|
@@ -111,6 +131,21 @@ export function findEventWithClass(eventId: string) {
|
|
|
111
131
|
class: {
|
|
112
132
|
include: {
|
|
113
133
|
teachers: { select: { id: true } },
|
|
134
|
+
school: {
|
|
135
|
+
include: {
|
|
136
|
+
users: {
|
|
137
|
+
where: { role: "ADMIN" as const },
|
|
138
|
+
select: { id: true },
|
|
139
|
+
},
|
|
140
|
+
memberships: {
|
|
141
|
+
where: {
|
|
142
|
+
role: "ADMIN" as const,
|
|
143
|
+
status: "ACTIVE" as const,
|
|
144
|
+
},
|
|
145
|
+
select: { userId: true },
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
},
|
|
114
149
|
},
|
|
115
150
|
},
|
|
116
151
|
},
|
|
@@ -125,6 +160,21 @@ export function findAssignmentWithClass(assignmentId: string) {
|
|
|
125
160
|
class: {
|
|
126
161
|
include: {
|
|
127
162
|
teachers: { select: { id: true } },
|
|
163
|
+
school: {
|
|
164
|
+
include: {
|
|
165
|
+
users: {
|
|
166
|
+
where: { role: "ADMIN" as const },
|
|
167
|
+
select: { id: true },
|
|
168
|
+
},
|
|
169
|
+
memberships: {
|
|
170
|
+
where: {
|
|
171
|
+
role: "ADMIN" as const,
|
|
172
|
+
status: "ACTIVE" as const,
|
|
173
|
+
},
|
|
174
|
+
select: { userId: true },
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
},
|
|
128
178
|
},
|
|
129
179
|
},
|
|
130
180
|
},
|
package/src/models/file.ts
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { prisma } from "../lib/prisma.js";
|
|
5
5
|
|
|
6
|
+
const classFileAccessInclude = {
|
|
7
|
+
students: true,
|
|
8
|
+
teachers: true,
|
|
9
|
+
school: {
|
|
10
|
+
include: {
|
|
11
|
+
users: {
|
|
12
|
+
where: { role: "ADMIN" as const },
|
|
13
|
+
select: { id: true },
|
|
14
|
+
},
|
|
15
|
+
memberships: {
|
|
16
|
+
where: {
|
|
17
|
+
role: "ADMIN" as const,
|
|
18
|
+
status: "ACTIVE" as const,
|
|
19
|
+
},
|
|
20
|
+
select: { userId: true },
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
} as const;
|
|
25
|
+
|
|
6
26
|
/** @returns File with assignment, submission, annotations, folder, announcement for permission checks. */
|
|
7
27
|
export function findFileById(fileId: string) {
|
|
8
28
|
return prisma.file.findUnique({
|
|
@@ -11,10 +31,7 @@ export function findFileById(fileId: string) {
|
|
|
11
31
|
assignment: {
|
|
12
32
|
include: {
|
|
13
33
|
class: {
|
|
14
|
-
include:
|
|
15
|
-
students: true,
|
|
16
|
-
teachers: true,
|
|
17
|
-
},
|
|
34
|
+
include: classFileAccessInclude,
|
|
18
35
|
},
|
|
19
36
|
},
|
|
20
37
|
},
|
|
@@ -26,6 +43,21 @@ export function findFileById(fileId: string) {
|
|
|
26
43
|
class: {
|
|
27
44
|
include: {
|
|
28
45
|
teachers: true,
|
|
46
|
+
school: {
|
|
47
|
+
include: {
|
|
48
|
+
users: {
|
|
49
|
+
where: { role: "ADMIN" as const },
|
|
50
|
+
select: { id: true },
|
|
51
|
+
},
|
|
52
|
+
memberships: {
|
|
53
|
+
where: {
|
|
54
|
+
role: "ADMIN" as const,
|
|
55
|
+
status: "ACTIVE" as const,
|
|
56
|
+
},
|
|
57
|
+
select: { userId: true },
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
29
61
|
},
|
|
30
62
|
},
|
|
31
63
|
},
|
|
@@ -40,6 +72,21 @@ export function findFileById(fileId: string) {
|
|
|
40
72
|
class: {
|
|
41
73
|
include: {
|
|
42
74
|
teachers: true,
|
|
75
|
+
school: {
|
|
76
|
+
include: {
|
|
77
|
+
users: {
|
|
78
|
+
where: { role: "ADMIN" as const },
|
|
79
|
+
select: { id: true },
|
|
80
|
+
},
|
|
81
|
+
memberships: {
|
|
82
|
+
where: {
|
|
83
|
+
role: "ADMIN" as const,
|
|
84
|
+
status: "ACTIVE" as const,
|
|
85
|
+
},
|
|
86
|
+
select: { userId: true },
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
43
90
|
},
|
|
44
91
|
},
|
|
45
92
|
},
|
|
@@ -49,20 +96,14 @@ export function findFileById(fileId: string) {
|
|
|
49
96
|
folder: {
|
|
50
97
|
include: {
|
|
51
98
|
class: {
|
|
52
|
-
include:
|
|
53
|
-
students: true,
|
|
54
|
-
teachers: true,
|
|
55
|
-
},
|
|
99
|
+
include: classFileAccessInclude,
|
|
56
100
|
},
|
|
57
101
|
},
|
|
58
102
|
},
|
|
59
103
|
announcement: {
|
|
60
104
|
include: {
|
|
61
105
|
class: {
|
|
62
|
-
include:
|
|
63
|
-
students: true,
|
|
64
|
-
teachers: true,
|
|
65
|
-
},
|
|
106
|
+
include: classFileAccessInclude,
|
|
66
107
|
},
|
|
67
108
|
},
|
|
68
109
|
},
|
package/src/models/folder.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Folder model – class folders, hierarchy, contents. Teacher permission checks.
|
|
3
3
|
*/
|
|
4
4
|
import { prisma } from "../lib/prisma.js";
|
|
5
|
+
import { classTeacherOrSchoolAdminWhere } from "./access.js";
|
|
5
6
|
|
|
6
7
|
const fileSelect = {
|
|
7
8
|
id: true,
|
|
@@ -19,12 +20,12 @@ const childFolderSelect = {
|
|
|
19
20
|
_count: { select: { files: true, childFolders: true } },
|
|
20
21
|
};
|
|
21
22
|
|
|
22
|
-
/** @returns Class if user is a teacher. */
|
|
23
|
+
/** @returns Class if user is a teacher or school admin. */
|
|
23
24
|
export function findClassWithTeacher(classId: string, teacherId: string) {
|
|
24
25
|
return prisma.class.findFirst({
|
|
25
26
|
where: {
|
|
26
27
|
id: classId,
|
|
27
|
-
|
|
28
|
+
...classTeacherOrSchoolAdminWhere(teacherId),
|
|
28
29
|
},
|
|
29
30
|
});
|
|
30
31
|
}
|
package/src/models/labChat.ts
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
* Lab chat model – AI lab conversations, members, posts. Teacher/student access.
|
|
3
3
|
*/
|
|
4
4
|
import { prisma } from "../lib/prisma.js";
|
|
5
|
+
import {
|
|
6
|
+
classMemberOrSchoolAdminWhere,
|
|
7
|
+
classTeacherOrSchoolAdminWhere,
|
|
8
|
+
} from "./access.js";
|
|
5
9
|
|
|
6
10
|
const labChatInclude = {
|
|
7
11
|
conversation: {
|
|
@@ -51,7 +55,7 @@ export function findClassWithTeachersForLab(classId: string, teacherId: string)
|
|
|
51
55
|
return prisma.class.findFirst({
|
|
52
56
|
where: {
|
|
53
57
|
id: classId,
|
|
54
|
-
|
|
58
|
+
...classTeacherOrSchoolAdminWhere(teacherId),
|
|
55
59
|
},
|
|
56
60
|
include: {
|
|
57
61
|
students: {
|
|
@@ -95,13 +99,13 @@ export function findLabChatByMember(labChatId: string, userId: string) {
|
|
|
95
99
|
});
|
|
96
100
|
}
|
|
97
101
|
|
|
98
|
-
/** @returns Lab chat if user is class teacher. */
|
|
102
|
+
/** @returns Lab chat if user is class teacher or school admin. */
|
|
99
103
|
export function findLabChatByTeacher(labChatId: string, userId: string) {
|
|
100
104
|
return prisma.labChat.findFirst({
|
|
101
105
|
where: {
|
|
102
106
|
id: labChatId,
|
|
103
107
|
class: {
|
|
104
|
-
|
|
108
|
+
...classTeacherOrSchoolAdminWhere(userId),
|
|
105
109
|
},
|
|
106
110
|
},
|
|
107
111
|
include: {
|
|
@@ -118,15 +122,12 @@ export function findLabChatById(labChatId: string) {
|
|
|
118
122
|
});
|
|
119
123
|
}
|
|
120
124
|
|
|
121
|
-
/** @returns Class if user is student or
|
|
125
|
+
/** @returns Class if user is student, teacher, or school admin. */
|
|
122
126
|
export function findClassMembership(classId: string, userId: string) {
|
|
123
127
|
return prisma.class.findFirst({
|
|
124
128
|
where: {
|
|
125
129
|
id: classId,
|
|
126
|
-
|
|
127
|
-
{ students: { some: { id: userId } } },
|
|
128
|
-
{ teachers: { some: { id: userId } } },
|
|
129
|
-
],
|
|
130
|
+
...classMemberOrSchoolAdminWhere(userId),
|
|
130
131
|
},
|
|
131
132
|
});
|
|
132
133
|
}
|