@excali-boards/boards-api-client 1.1.73 → 1.1.75
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/classes/admin.d.ts +1 -1
- package/dist/classes/auth.d.ts +20 -18
- package/dist/classes/boards.d.ts +2 -3
- package/dist/classes/personal.d.ts +1 -2
- package/dist/classes/sessions.d.ts +2 -0
- package/dist/external/vars.d.ts +6 -1
- package/dist/external/vars.js +2 -1
- package/package.json +18 -7
- package/prisma/generated/edge.js +17 -33
- package/prisma/generated/index-browser.js +11 -28
- package/prisma/generated/index.d.ts +8352 -13418
- package/prisma/generated/index.js +17 -33
- package/prisma/generated/package.json +1 -1
- package/prisma/generated/schema.prisma +23 -55
- package/prisma/generated/wasm.js +17 -33
- package/prisma/schema/boards.prisma +4 -3
- package/prisma/schema/schema.prisma +6 -0
- package/prisma/schema/user.prisma +5 -1
- package/dist/src/classes/admin.d.ts +0 -23
- package/dist/src/classes/admin.js +0 -20
- package/dist/src/classes/analytics.d.ts +0 -62
- package/dist/src/classes/analytics.js +0 -38
- package/dist/src/classes/auth.d.ts +0 -48
- package/dist/src/classes/auth.js +0 -12
- package/dist/src/classes/boards.d.ts +0 -99
- package/dist/src/classes/boards.js +0 -62
- package/dist/src/classes/calendar.d.ts +0 -84
- package/dist/src/classes/calendar.js +0 -45
- package/dist/src/classes/categories.d.ts +0 -75
- package/dist/src/classes/categories.js +0 -50
- package/dist/src/classes/files.d.ts +0 -45
- package/dist/src/classes/files.js +0 -31
- package/dist/src/classes/flashcards.d.ts +0 -120
- package/dist/src/classes/flashcards.js +0 -68
- package/dist/src/classes/groups.d.ts +0 -80
- package/dist/src/classes/groups.js +0 -62
- package/dist/src/classes/invites.d.ts +0 -116
- package/dist/src/classes/invites.js +0 -50
- package/dist/src/classes/metrics.d.ts +0 -31
- package/dist/src/classes/metrics.js +0 -20
- package/dist/src/classes/permissions.d.ts +0 -48
- package/dist/src/classes/permissions.js +0 -32
- package/dist/src/classes/sessions.d.ts +0 -61
- package/dist/src/classes/sessions.js +0 -38
- package/dist/src/classes/users.d.ts +0 -37
- package/dist/src/classes/users.js +0 -26
- package/dist/src/classes/utils.d.ts +0 -19
- package/dist/src/classes/utils.js +0 -16
- package/dist/src/core/manager.d.ts +0 -44
- package/dist/src/core/manager.js +0 -92
- package/dist/src/core/utils.d.ts +0 -9
- package/dist/src/core/utils.js +0 -52
- package/dist/src/external/types.d.ts +0 -87
- package/dist/src/external/types.js +0 -4
- package/dist/src/external/vars.d.ts +0 -99
- package/dist/src/external/vars.js +0 -65
- package/dist/src/index.d.ts +0 -20
- package/dist/src/index.js +0 -20
- package/dist/src/types.d.ts +0 -61
- package/dist/src/types.js +0 -1
- package/prisma/schema/personal.prisma +0 -42
|
@@ -5,12 +5,15 @@ model Group {
|
|
|
5
5
|
name String
|
|
6
6
|
index Int
|
|
7
7
|
|
|
8
|
+
kind GroupKind @default(Shared)
|
|
9
|
+
ownerId String? @unique
|
|
10
|
+
|
|
8
11
|
calCode String?
|
|
9
12
|
events Event[]
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
owner User? @relation("PersonalGroupOwner", fields: [ownerId], references: [userId], onDelete: Cascade)
|
|
15
|
+
categories Category[]
|
|
16
|
+
permissions GroupPermission[]
|
|
14
17
|
}
|
|
15
18
|
|
|
16
19
|
model Category {
|
|
@@ -23,9 +26,8 @@ model Category {
|
|
|
23
26
|
groupId String
|
|
24
27
|
group Group @relation(fields: [groupId], references: [groupId], onDelete: Cascade)
|
|
25
28
|
|
|
26
|
-
boards
|
|
27
|
-
permissions
|
|
28
|
-
personalCategory PersonalCategory?
|
|
29
|
+
boards Board[]
|
|
30
|
+
permissions CategoryPermission[]
|
|
29
31
|
}
|
|
30
32
|
|
|
31
33
|
model Board {
|
|
@@ -46,7 +48,6 @@ model Board {
|
|
|
46
48
|
category Category @relation(fields: [categoryId], references: [categoryId], onDelete: Cascade)
|
|
47
49
|
|
|
48
50
|
flashcardDeck FlashcardDeck?
|
|
49
|
-
personalBoard PersonalBoard?
|
|
50
51
|
|
|
51
52
|
files File[]
|
|
52
53
|
boardPermission BoardPermission[]
|
|
@@ -242,49 +243,6 @@ model Invite {
|
|
|
242
243
|
creator User @relation(fields: [createdBy], references: [userId])
|
|
243
244
|
}
|
|
244
245
|
|
|
245
|
-
model PersonalWorkspace {
|
|
246
|
-
dbId String @id @default(uuid())
|
|
247
|
-
userId String @unique
|
|
248
|
-
groupId String @unique
|
|
249
|
-
|
|
250
|
-
user User @relation(fields: [userId], references: [userId], onDelete: Cascade)
|
|
251
|
-
group Group @relation(fields: [groupId], references: [groupId], onDelete: Cascade)
|
|
252
|
-
categories PersonalCategory[]
|
|
253
|
-
boards PersonalBoard[]
|
|
254
|
-
|
|
255
|
-
createdAt DateTime @default(now())
|
|
256
|
-
updatedAt DateTime @updatedAt
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
model PersonalCategory {
|
|
260
|
-
dbId String @id @default(uuid())
|
|
261
|
-
categoryId String @unique
|
|
262
|
-
workspaceId String
|
|
263
|
-
backingCategoryId String @unique
|
|
264
|
-
name String
|
|
265
|
-
index Int
|
|
266
|
-
|
|
267
|
-
workspace PersonalWorkspace @relation(fields: [workspaceId], references: [dbId], onDelete: Cascade)
|
|
268
|
-
backingCategory Category @relation(fields: [backingCategoryId], references: [categoryId], onDelete: Cascade)
|
|
269
|
-
boards PersonalBoard[]
|
|
270
|
-
|
|
271
|
-
@@index([workspaceId, index])
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
model PersonalBoard {
|
|
275
|
-
dbId String @id @default(uuid())
|
|
276
|
-
boardId String @unique
|
|
277
|
-
workspaceId String
|
|
278
|
-
categoryId String
|
|
279
|
-
|
|
280
|
-
board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)
|
|
281
|
-
workspace PersonalWorkspace @relation(fields: [workspaceId], references: [dbId], onDelete: Cascade)
|
|
282
|
-
category PersonalCategory @relation(fields: [categoryId], references: [dbId], onDelete: Cascade)
|
|
283
|
-
|
|
284
|
-
@@index([workspaceId])
|
|
285
|
-
@@index([categoryId])
|
|
286
|
-
}
|
|
287
|
-
|
|
288
246
|
generator client {
|
|
289
247
|
provider = "prisma-client-js"
|
|
290
248
|
output = "../generated"
|
|
@@ -300,6 +258,7 @@ enum Platforms {
|
|
|
300
258
|
Discord
|
|
301
259
|
Google
|
|
302
260
|
GitHub
|
|
261
|
+
OIDC
|
|
303
262
|
}
|
|
304
263
|
|
|
305
264
|
enum Device {
|
|
@@ -334,6 +293,11 @@ enum GroupRole {
|
|
|
334
293
|
GroupAdmin // GroupManager + user/invite management
|
|
335
294
|
}
|
|
336
295
|
|
|
296
|
+
enum GroupKind {
|
|
297
|
+
Shared
|
|
298
|
+
Personal
|
|
299
|
+
}
|
|
300
|
+
|
|
337
301
|
enum RegistrationMethod {
|
|
338
302
|
direct
|
|
339
303
|
invite
|
|
@@ -378,11 +342,11 @@ model User {
|
|
|
378
342
|
|
|
379
343
|
flashcardProgress DeckProgress[]
|
|
380
344
|
|
|
381
|
-
sessions
|
|
382
|
-
createdEvents
|
|
383
|
-
createdInvites
|
|
384
|
-
boardActivities
|
|
385
|
-
|
|
345
|
+
sessions Session[]
|
|
346
|
+
createdEvents Event[]
|
|
347
|
+
createdInvites Invite[]
|
|
348
|
+
boardActivities UserBoardActivity[]
|
|
349
|
+
personalGroup Group? @relation("PersonalGroupOwner")
|
|
386
350
|
}
|
|
387
351
|
|
|
388
352
|
model Session {
|
|
@@ -411,8 +375,12 @@ model LoginMethod {
|
|
|
411
375
|
platform Platforms
|
|
412
376
|
platformEmail String
|
|
413
377
|
|
|
378
|
+
providerIssuer String?
|
|
379
|
+
providerSubject String?
|
|
380
|
+
|
|
414
381
|
userId String
|
|
415
382
|
user User @relation(fields: [userId], references: [userId], onDelete: Cascade)
|
|
416
383
|
|
|
417
384
|
@@unique([platform, platformEmail])
|
|
385
|
+
@@unique([platform, providerIssuer, providerSubject])
|
|
418
386
|
}
|
package/prisma/generated/wasm.js
CHANGED
|
@@ -97,6 +97,8 @@ exports.Prisma.GroupScalarFieldEnum = {
|
|
|
97
97
|
groupId: 'groupId',
|
|
98
98
|
name: 'name',
|
|
99
99
|
index: 'index',
|
|
100
|
+
kind: 'kind',
|
|
101
|
+
ownerId: 'ownerId',
|
|
100
102
|
calCode: 'calCode'
|
|
101
103
|
};
|
|
102
104
|
|
|
@@ -227,30 +229,6 @@ exports.Prisma.InviteScalarFieldEnum = {
|
|
|
227
229
|
currentUses: 'currentUses'
|
|
228
230
|
};
|
|
229
231
|
|
|
230
|
-
exports.Prisma.PersonalWorkspaceScalarFieldEnum = {
|
|
231
|
-
dbId: 'dbId',
|
|
232
|
-
userId: 'userId',
|
|
233
|
-
groupId: 'groupId',
|
|
234
|
-
createdAt: 'createdAt',
|
|
235
|
-
updatedAt: 'updatedAt'
|
|
236
|
-
};
|
|
237
|
-
|
|
238
|
-
exports.Prisma.PersonalCategoryScalarFieldEnum = {
|
|
239
|
-
dbId: 'dbId',
|
|
240
|
-
categoryId: 'categoryId',
|
|
241
|
-
workspaceId: 'workspaceId',
|
|
242
|
-
backingCategoryId: 'backingCategoryId',
|
|
243
|
-
name: 'name',
|
|
244
|
-
index: 'index'
|
|
245
|
-
};
|
|
246
|
-
|
|
247
|
-
exports.Prisma.PersonalBoardScalarFieldEnum = {
|
|
248
|
-
dbId: 'dbId',
|
|
249
|
-
boardId: 'boardId',
|
|
250
|
-
workspaceId: 'workspaceId',
|
|
251
|
-
categoryId: 'categoryId'
|
|
252
|
-
};
|
|
253
|
-
|
|
254
232
|
exports.Prisma.AllEnumsModelScalarFieldEnum = {
|
|
255
233
|
dbId: 'dbId',
|
|
256
234
|
platformEnum: 'platformEnum',
|
|
@@ -291,6 +269,8 @@ exports.Prisma.LoginMethodScalarFieldEnum = {
|
|
|
291
269
|
dbId: 'dbId',
|
|
292
270
|
platform: 'platform',
|
|
293
271
|
platformEmail: 'platformEmail',
|
|
272
|
+
providerIssuer: 'providerIssuer',
|
|
273
|
+
providerSubject: 'providerSubject',
|
|
294
274
|
userId: 'userId'
|
|
295
275
|
};
|
|
296
276
|
|
|
@@ -312,7 +292,8 @@ exports.Platforms = exports.$Enums.Platforms = {
|
|
|
312
292
|
Microsoft: 'Microsoft',
|
|
313
293
|
Discord: 'Discord',
|
|
314
294
|
Google: 'Google',
|
|
315
|
-
GitHub: 'GitHub'
|
|
295
|
+
GitHub: 'GitHub',
|
|
296
|
+
OIDC: 'OIDC'
|
|
316
297
|
};
|
|
317
298
|
|
|
318
299
|
exports.Device = exports.$Enums.Device = {
|
|
@@ -346,6 +327,11 @@ exports.GroupRole = exports.$Enums.GroupRole = {
|
|
|
346
327
|
GroupAdmin: 'GroupAdmin'
|
|
347
328
|
};
|
|
348
329
|
|
|
330
|
+
exports.GroupKind = exports.$Enums.GroupKind = {
|
|
331
|
+
Shared: 'Shared',
|
|
332
|
+
Personal: 'Personal'
|
|
333
|
+
};
|
|
334
|
+
|
|
349
335
|
exports.RegistrationMethod = exports.$Enums.RegistrationMethod = {
|
|
350
336
|
direct: 'direct',
|
|
351
337
|
invite: 'invite',
|
|
@@ -366,9 +352,6 @@ exports.Prisma.ModelName = {
|
|
|
366
352
|
CategoryPermission: 'CategoryPermission',
|
|
367
353
|
BoardPermission: 'BoardPermission',
|
|
368
354
|
Invite: 'Invite',
|
|
369
|
-
PersonalWorkspace: 'PersonalWorkspace',
|
|
370
|
-
PersonalCategory: 'PersonalCategory',
|
|
371
|
-
PersonalBoard: 'PersonalBoard',
|
|
372
355
|
AllEnumsModel: 'AllEnumsModel',
|
|
373
356
|
User: 'User',
|
|
374
357
|
Session: 'Session',
|
|
@@ -385,7 +368,7 @@ const config = {
|
|
|
385
368
|
"value": "prisma-client-js"
|
|
386
369
|
},
|
|
387
370
|
"output": {
|
|
388
|
-
"value": "/
|
|
371
|
+
"value": "/home/runner/work/boards-api-client/boards-api-client/prisma/generated",
|
|
389
372
|
"fromEnvVar": null
|
|
390
373
|
},
|
|
391
374
|
"config": {
|
|
@@ -399,7 +382,7 @@ const config = {
|
|
|
399
382
|
}
|
|
400
383
|
],
|
|
401
384
|
"previewFeatures": [],
|
|
402
|
-
"sourceFilePath": "/
|
|
385
|
+
"sourceFilePath": "/home/runner/work/boards-api-client/boards-api-client/prisma/schema/schema.prisma",
|
|
403
386
|
"isCustomOutput": true
|
|
404
387
|
},
|
|
405
388
|
"relativeEnvPaths": {
|
|
@@ -413,6 +396,7 @@ const config = {
|
|
|
413
396
|
],
|
|
414
397
|
"activeProvider": "postgresql",
|
|
415
398
|
"postinstall": false,
|
|
399
|
+
"ciName": "GitHub Actions",
|
|
416
400
|
"inlineDatasources": {
|
|
417
401
|
"db": {
|
|
418
402
|
"url": {
|
|
@@ -421,13 +405,13 @@ const config = {
|
|
|
421
405
|
}
|
|
422
406
|
}
|
|
423
407
|
},
|
|
424
|
-
"inlineSchema": "model Group {\n dbId String @id @default(uuid())\n groupId String @unique\n\n name String\n index Int\n\n calCode String?\n events Event[]\n\n categories Category[]\n permissions GroupPermission[]\n personalWorkspace PersonalWorkspace?\n}\n\nmodel Category {\n dbId String @id @default(uuid())\n categoryId String @unique\n\n name String\n index Int\n\n groupId String\n group Group @relation(fields: [groupId], references: [groupId], onDelete: Cascade)\n\n boards Board[]\n permissions CategoryPermission[]\n personalCategory PersonalCategory?\n}\n\nmodel Board {\n dbId String @id @default(uuid())\n boardId String @unique\n\n name String\n index Int\n\n version Int @default(0)\n updatedAt DateTime @default(now())\n type BoardType @default(Excalidraw)\n\n scheduledForDeletion DateTime?\n totalSizeBytes Int @default(0)\n\n categoryId String\n category Category @relation(fields: [categoryId], references: [categoryId], onDelete: Cascade)\n\n flashcardDeck FlashcardDeck?\n personalBoard PersonalBoard?\n\n files File[]\n boardPermission BoardPermission[]\n userActivities UserBoardActivity[]\n\n @@index([categoryId])\n @@index([index])\n}\n\nmodel UserBoardActivity {\n dbId String @id @default(uuid())\n\n userId String\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n boardId String\n board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)\n\n totalSessions Int @default(0)\n totalActiveSeconds Int @default(0)\n lastActivityAt DateTime @default(now())\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([userId, boardId])\n @@index([boardId])\n @@index([lastActivityAt])\n}\n\nmodel File {\n dbId String @id @default(uuid())\n fileId String @unique\n\n mimeType String\n createdAt DateTime\n sizeBytes Int\n\n boardId String\n board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)\n\n @@index([boardId])\n}\n\nmodel Event {\n dbId String @id @default(uuid())\n eventId String @unique\n\n title String\n start DateTime\n end DateTime\n color String @default(\"#9676ca\")\n\n where String?\n description String?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n groupId String\n group Group @relation(fields: [groupId], references: [groupId], onDelete: Cascade)\n\n createdBy String\n creator User @relation(fields: [createdBy], references: [userId], onDelete: Cascade)\n\n @@index([createdBy])\n @@index([groupId])\n @@index([start])\n @@index([end])\n}\n\nmodel FlashcardDeck {\n dbId String @id @default(uuid())\n deckId String @unique\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n boardId String @unique\n board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)\n\n cards FlashcardCard[]\n progress DeckProgress[]\n\n @@index([boardId])\n}\n\nmodel FlashcardCard {\n dbId String @id @default(uuid())\n cardId String @unique\n\n front String\n back String\n index Int\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n deckId String\n deck FlashcardDeck @relation(fields: [deckId], references: [deckId], onDelete: Cascade)\n\n @@index([deckId])\n}\n\nmodel DeckProgress {\n dbId String @id @default(uuid())\n\n deckId String\n userId String\n\n currentIndex Int @default(0)\n completed Boolean @default(false)\n lastStudied DateTime @default(now())\n\n deck FlashcardDeck @relation(fields: [deckId], references: [deckId], onDelete: Cascade)\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n @@unique([deckId, userId])\n @@index([userId])\n}\n\nmodel GroupPermission {\n dbId String @id @default(uuid())\n\n groupId String\n userId String\n role GroupRole\n\n grantedAt DateTime @default(now())\n grantedBy String\n\n group Group @relation(fields: [groupId], references: [groupId], onDelete: Cascade)\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n @@unique([groupId, userId])\n}\n\nmodel CategoryPermission {\n dbId String @id @default(uuid())\n\n categoryId String\n userId String\n role CategoryRole\n\n grantedAt DateTime @default(now())\n grantedBy String\n\n category Category @relation(fields: [categoryId], references: [categoryId], onDelete: Cascade)\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n @@unique([categoryId, userId])\n}\n\nmodel BoardPermission {\n dbId String @id @default(uuid())\n\n boardId String\n userId String\n role BoardRole\n\n grantedAt DateTime @default(now())\n grantedBy String\n\n board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n @@unique([boardId, userId])\n}\n\nmodel Invite {\n dbId String @id @default(uuid())\n\n code String @unique\n\n // Allow invites to multiple groups, categories, or boards.\n // If multiple are specified, the invite grants access to all of them.\n groupIds String[]\n groupRole GroupRole?\n\n categoryIds String[]\n categoryRole CategoryRole?\n\n boardIds String[]\n boardRole BoardRole?\n\n createdBy String\n createdAt DateTime @default(now())\n expiresAt DateTime\n\n maxUses Int @default(1)\n currentUses Int @default(0)\n\n creator User @relation(fields: [createdBy], references: [userId])\n}\n\nmodel PersonalWorkspace {\n dbId String @id @default(uuid())\n userId String @unique\n groupId String @unique\n\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n group Group @relation(fields: [groupId], references: [groupId], onDelete: Cascade)\n categories PersonalCategory[]\n boards PersonalBoard[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel PersonalCategory {\n dbId String @id @default(uuid())\n categoryId String @unique\n workspaceId String\n backingCategoryId String @unique\n name String\n index Int\n\n workspace PersonalWorkspace @relation(fields: [workspaceId], references: [dbId], onDelete: Cascade)\n backingCategory Category @relation(fields: [backingCategoryId], references: [categoryId], onDelete: Cascade)\n boards PersonalBoard[]\n\n @@index([workspaceId, index])\n}\n\nmodel PersonalBoard {\n dbId String @id @default(uuid())\n boardId String @unique\n workspaceId String\n categoryId String\n\n board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)\n workspace PersonalWorkspace @relation(fields: [workspaceId], references: [dbId], onDelete: Cascade)\n category PersonalCategory @relation(fields: [categoryId], references: [dbId], onDelete: Cascade)\n\n @@index([workspaceId])\n @@index([categoryId])\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n output = \"../generated\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum Platforms {\n Microsoft\n Discord\n Google\n GitHub\n}\n\nenum Device {\n Desktop\n Mobile\n Tablet\n Other\n}\n\nenum BoardType {\n Excalidraw\n Tldraw\n}\n\n// Separate role enums for each resource type\nenum BoardRole {\n BoardViewer // read-only to specific board\n BoardCollaborator // BoardViewer + write to specific board\n}\n\nenum CategoryRole {\n CategoryViewer // read-only to all boards in category\n CategoryCollaborator // CategoryViewer + write to all boards in category\n CategoryManager // CategoryCollaborator + create/delete boards in category\n CategoryAdmin // CategoryManager + user/invite management\n}\n\nenum GroupRole {\n GroupViewer // read-only to all categories and boards in group\n GroupCollaborator // GroupViewer + write to all categories and boards in group\n GroupManager // GroupCollaborator + create/delete categories and boards in group\n GroupAdmin // GroupManager + user/invite management\n}\n\nenum RegistrationMethod {\n direct\n invite\n oauth\n}\n\nmodel AllEnumsModel {\n dbId String @id @default(uuid())\n\n platformEnum Platforms\n deviceEnum Device\n boardTypeEnum BoardType\n\n boardRoleEnum BoardRole\n categoryRoleEnum CategoryRole\n groupRoleEnum GroupRole\n\n registrationMethodEnum RegistrationMethod\n}\n\nmodel User {\n dbId String @id @default(uuid())\n userId String @unique\n email String @unique\n\n avatarUrl String?\n displayName String\n\n mainGroupId String?\n\n qrLoginRedirectDelay Boolean @default(true)\n\n mainLoginType Platforms\n loginMethods LoginMethod[]\n\n invitedBy String?\n registrationMethod RegistrationMethod @default(direct)\n\n groupPermissions GroupPermission[]\n categoryPermissions CategoryPermission[]\n boardPermissions BoardPermission[]\n\n flashcardProgress DeckProgress[]\n\n sessions Session[]\n createdEvents Event[]\n createdInvites Invite[]\n boardActivities UserBoardActivity[]\n personalWorkspace PersonalWorkspace?\n}\n\nmodel Session {\n dbId String @id @default(uuid())\n\n token String @unique\n\n device Device?\n locationEncrypted String?\n isQrLogin Boolean @default(false)\n\n userId String\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n expiresAt DateTime\n lastUsed DateTime @default(now())\n\n @@index([userId])\n @@index([expiresAt])\n}\n\nmodel LoginMethod {\n dbId String @id @default(uuid())\n\n platform Platforms\n platformEmail String\n\n userId String\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n @@unique([platform, platformEmail])\n}\n",
|
|
425
|
-
"inlineSchemaHash": "
|
|
408
|
+
"inlineSchema": "model Group {\n dbId String @id @default(uuid())\n groupId String @unique\n\n name String\n index Int\n\n kind GroupKind @default(Shared)\n ownerId String? @unique\n\n calCode String?\n events Event[]\n\n owner User? @relation(\"PersonalGroupOwner\", fields: [ownerId], references: [userId], onDelete: Cascade)\n categories Category[]\n permissions GroupPermission[]\n}\n\nmodel Category {\n dbId String @id @default(uuid())\n categoryId String @unique\n\n name String\n index Int\n\n groupId String\n group Group @relation(fields: [groupId], references: [groupId], onDelete: Cascade)\n\n boards Board[]\n permissions CategoryPermission[]\n}\n\nmodel Board {\n dbId String @id @default(uuid())\n boardId String @unique\n\n name String\n index Int\n\n version Int @default(0)\n updatedAt DateTime @default(now())\n type BoardType @default(Excalidraw)\n\n scheduledForDeletion DateTime?\n totalSizeBytes Int @default(0)\n\n categoryId String\n category Category @relation(fields: [categoryId], references: [categoryId], onDelete: Cascade)\n\n flashcardDeck FlashcardDeck?\n\n files File[]\n boardPermission BoardPermission[]\n userActivities UserBoardActivity[]\n\n @@index([categoryId])\n @@index([index])\n}\n\nmodel UserBoardActivity {\n dbId String @id @default(uuid())\n\n userId String\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n boardId String\n board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)\n\n totalSessions Int @default(0)\n totalActiveSeconds Int @default(0)\n lastActivityAt DateTime @default(now())\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([userId, boardId])\n @@index([boardId])\n @@index([lastActivityAt])\n}\n\nmodel File {\n dbId String @id @default(uuid())\n fileId String @unique\n\n mimeType String\n createdAt DateTime\n sizeBytes Int\n\n boardId String\n board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)\n\n @@index([boardId])\n}\n\nmodel Event {\n dbId String @id @default(uuid())\n eventId String @unique\n\n title String\n start DateTime\n end DateTime\n color String @default(\"#9676ca\")\n\n where String?\n description String?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n groupId String\n group Group @relation(fields: [groupId], references: [groupId], onDelete: Cascade)\n\n createdBy String\n creator User @relation(fields: [createdBy], references: [userId], onDelete: Cascade)\n\n @@index([createdBy])\n @@index([groupId])\n @@index([start])\n @@index([end])\n}\n\nmodel FlashcardDeck {\n dbId String @id @default(uuid())\n deckId String @unique\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n boardId String @unique\n board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)\n\n cards FlashcardCard[]\n progress DeckProgress[]\n\n @@index([boardId])\n}\n\nmodel FlashcardCard {\n dbId String @id @default(uuid())\n cardId String @unique\n\n front String\n back String\n index Int\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n deckId String\n deck FlashcardDeck @relation(fields: [deckId], references: [deckId], onDelete: Cascade)\n\n @@index([deckId])\n}\n\nmodel DeckProgress {\n dbId String @id @default(uuid())\n\n deckId String\n userId String\n\n currentIndex Int @default(0)\n completed Boolean @default(false)\n lastStudied DateTime @default(now())\n\n deck FlashcardDeck @relation(fields: [deckId], references: [deckId], onDelete: Cascade)\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n @@unique([deckId, userId])\n @@index([userId])\n}\n\nmodel GroupPermission {\n dbId String @id @default(uuid())\n\n groupId String\n userId String\n role GroupRole\n\n grantedAt DateTime @default(now())\n grantedBy String\n\n group Group @relation(fields: [groupId], references: [groupId], onDelete: Cascade)\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n @@unique([groupId, userId])\n}\n\nmodel CategoryPermission {\n dbId String @id @default(uuid())\n\n categoryId String\n userId String\n role CategoryRole\n\n grantedAt DateTime @default(now())\n grantedBy String\n\n category Category @relation(fields: [categoryId], references: [categoryId], onDelete: Cascade)\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n @@unique([categoryId, userId])\n}\n\nmodel BoardPermission {\n dbId String @id @default(uuid())\n\n boardId String\n userId String\n role BoardRole\n\n grantedAt DateTime @default(now())\n grantedBy String\n\n board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n @@unique([boardId, userId])\n}\n\nmodel Invite {\n dbId String @id @default(uuid())\n\n code String @unique\n\n // Allow invites to multiple groups, categories, or boards.\n // If multiple are specified, the invite grants access to all of them.\n groupIds String[]\n groupRole GroupRole?\n\n categoryIds String[]\n categoryRole CategoryRole?\n\n boardIds String[]\n boardRole BoardRole?\n\n createdBy String\n createdAt DateTime @default(now())\n expiresAt DateTime\n\n maxUses Int @default(1)\n currentUses Int @default(0)\n\n creator User @relation(fields: [createdBy], references: [userId])\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n output = \"../generated\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nenum Platforms {\n Microsoft\n Discord\n Google\n GitHub\n OIDC\n}\n\nenum Device {\n Desktop\n Mobile\n Tablet\n Other\n}\n\nenum BoardType {\n Excalidraw\n Tldraw\n}\n\n// Separate role enums for each resource type\nenum BoardRole {\n BoardViewer // read-only to specific board\n BoardCollaborator // BoardViewer + write to specific board\n}\n\nenum CategoryRole {\n CategoryViewer // read-only to all boards in category\n CategoryCollaborator // CategoryViewer + write to all boards in category\n CategoryManager // CategoryCollaborator + create/delete boards in category\n CategoryAdmin // CategoryManager + user/invite management\n}\n\nenum GroupRole {\n GroupViewer // read-only to all categories and boards in group\n GroupCollaborator // GroupViewer + write to all categories and boards in group\n GroupManager // GroupCollaborator + create/delete categories and boards in group\n GroupAdmin // GroupManager + user/invite management\n}\n\nenum GroupKind {\n Shared\n Personal\n}\n\nenum RegistrationMethod {\n direct\n invite\n oauth\n}\n\nmodel AllEnumsModel {\n dbId String @id @default(uuid())\n\n platformEnum Platforms\n deviceEnum Device\n boardTypeEnum BoardType\n\n boardRoleEnum BoardRole\n categoryRoleEnum CategoryRole\n groupRoleEnum GroupRole\n\n registrationMethodEnum RegistrationMethod\n}\n\nmodel User {\n dbId String @id @default(uuid())\n userId String @unique\n email String @unique\n\n avatarUrl String?\n displayName String\n\n mainGroupId String?\n\n qrLoginRedirectDelay Boolean @default(true)\n\n mainLoginType Platforms\n loginMethods LoginMethod[]\n\n invitedBy String?\n registrationMethod RegistrationMethod @default(direct)\n\n groupPermissions GroupPermission[]\n categoryPermissions CategoryPermission[]\n boardPermissions BoardPermission[]\n\n flashcardProgress DeckProgress[]\n\n sessions Session[]\n createdEvents Event[]\n createdInvites Invite[]\n boardActivities UserBoardActivity[]\n personalGroup Group? @relation(\"PersonalGroupOwner\")\n}\n\nmodel Session {\n dbId String @id @default(uuid())\n\n token String @unique\n\n device Device?\n locationEncrypted String?\n isQrLogin Boolean @default(false)\n\n userId String\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n expiresAt DateTime\n lastUsed DateTime @default(now())\n\n @@index([userId])\n @@index([expiresAt])\n}\n\nmodel LoginMethod {\n dbId String @id @default(uuid())\n\n platform Platforms\n platformEmail String\n\n providerIssuer String?\n providerSubject String?\n\n userId String\n user User @relation(fields: [userId], references: [userId], onDelete: Cascade)\n\n @@unique([platform, platformEmail])\n @@unique([platform, providerIssuer, providerSubject])\n}\n",
|
|
409
|
+
"inlineSchemaHash": "17b0659a2fd55f1f693985c460e72085d2e9bcfa4d864ac907b3dda9c4ab074d",
|
|
426
410
|
"copyEngine": true
|
|
427
411
|
}
|
|
428
412
|
config.dirname = '/'
|
|
429
413
|
|
|
430
|
-
config.runtimeDataModel = JSON.parse("{\"models\":{\"Group\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"index\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"calCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"Event\",\"relationName\":\"EventToGroup\"},{\"name\":\"categories\",\"kind\":\"object\",\"type\":\"Category\",\"relationName\":\"CategoryToGroup\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"GroupPermission\",\"relationName\":\"GroupToGroupPermission\"},{\"name\":\"personalWorkspace\",\"kind\":\"object\",\"type\":\"PersonalWorkspace\",\"relationName\":\"GroupToPersonalWorkspace\"}],\"dbName\":null},\"Category\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"categoryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"index\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"group\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"CategoryToGroup\"},{\"name\":\"boards\",\"kind\":\"object\",\"type\":\"Board\",\"relationName\":\"BoardToCategory\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"CategoryPermission\",\"relationName\":\"CategoryToCategoryPermission\"},{\"name\":\"personalCategory\",\"kind\":\"object\",\"type\":\"PersonalCategory\",\"relationName\":\"CategoryToPersonalCategory\"}],\"dbName\":null},\"Board\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"boardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"index\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"version\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"BoardType\"},{\"name\":\"scheduledForDeletion\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"totalSizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"categoryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"object\",\"type\":\"Category\",\"relationName\":\"BoardToCategory\"},{\"name\":\"flashcardDeck\",\"kind\":\"object\",\"type\":\"FlashcardDeck\",\"relationName\":\"BoardToFlashcardDeck\"},{\"name\":\"personalBoard\",\"kind\":\"object\",\"type\":\"PersonalBoard\",\"relationName\":\"BoardToPersonalBoard\"},{\"name\":\"files\",\"kind\":\"object\",\"type\":\"File\",\"relationName\":\"BoardToFile\"},{\"name\":\"boardPermission\",\"kind\":\"object\",\"type\":\"BoardPermission\",\"relationName\":\"BoardToBoardPermission\"},{\"name\":\"userActivities\",\"kind\":\"object\",\"type\":\"UserBoardActivity\",\"relationName\":\"BoardToUserBoardActivity\"}],\"dbName\":null},\"UserBoardActivity\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserBoardActivity\"},{\"name\":\"boardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"board\",\"kind\":\"object\",\"type\":\"Board\",\"relationName\":\"BoardToUserBoardActivity\"},{\"name\":\"totalSessions\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"totalActiveSeconds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"lastActivityAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"File\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fileId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"sizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"boardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"board\",\"kind\":\"object\",\"type\":\"Board\",\"relationName\":\"BoardToFile\"}],\"dbName\":null},\"Event\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"start\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"end\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"color\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"where\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"group\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"EventToGroup\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"creator\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"EventToUser\"}],\"dbName\":null},\"FlashcardDeck\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"deckId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"boardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"board\",\"kind\":\"object\",\"type\":\"Board\",\"relationName\":\"BoardToFlashcardDeck\"},{\"name\":\"cards\",\"kind\":\"object\",\"type\":\"FlashcardCard\",\"relationName\":\"FlashcardCardToFlashcardDeck\"},{\"name\":\"progress\",\"kind\":\"object\",\"type\":\"DeckProgress\",\"relationName\":\"DeckProgressToFlashcardDeck\"}],\"dbName\":null},\"FlashcardCard\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"front\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"back\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"index\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"deckId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"deck\",\"kind\":\"object\",\"type\":\"FlashcardDeck\",\"relationName\":\"FlashcardCardToFlashcardDeck\"}],\"dbName\":null},\"DeckProgress\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"deckId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"currentIndex\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"completed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"lastStudied\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"deck\",\"kind\":\"object\",\"type\":\"FlashcardDeck\",\"relationName\":\"DeckProgressToFlashcardDeck\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"DeckProgressToUser\"}],\"dbName\":null},\"GroupPermission\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"GroupRole\"},{\"name\":\"grantedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"grantedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"group\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"GroupToGroupPermission\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"GroupPermissionToUser\"}],\"dbName\":null},\"CategoryPermission\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"categoryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"CategoryRole\"},{\"name\":\"grantedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"grantedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"object\",\"type\":\"Category\",\"relationName\":\"CategoryToCategoryPermission\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"CategoryPermissionToUser\"}],\"dbName\":null},\"BoardPermission\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"boardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"BoardRole\"},{\"name\":\"grantedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"grantedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"board\",\"kind\":\"object\",\"type\":\"Board\",\"relationName\":\"BoardToBoardPermission\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"BoardPermissionToUser\"}],\"dbName\":null},\"Invite\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupIds\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupRole\",\"kind\":\"enum\",\"type\":\"GroupRole\"},{\"name\":\"categoryIds\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"categoryRole\",\"kind\":\"enum\",\"type\":\"CategoryRole\"},{\"name\":\"boardIds\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"boardRole\",\"kind\":\"enum\",\"type\":\"BoardRole\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"maxUses\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"currentUses\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"creator\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"InviteToUser\"}],\"dbName\":null},\"PersonalWorkspace\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PersonalWorkspaceToUser\"},{\"name\":\"group\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"GroupToPersonalWorkspace\"},{\"name\":\"categories\",\"kind\":\"object\",\"type\":\"PersonalCategory\",\"relationName\":\"PersonalCategoryToPersonalWorkspace\"},{\"name\":\"boards\",\"kind\":\"object\",\"type\":\"PersonalBoard\",\"relationName\":\"PersonalBoardToPersonalWorkspace\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"PersonalCategory\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"categoryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"workspaceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"backingCategoryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"index\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"workspace\",\"kind\":\"object\",\"type\":\"PersonalWorkspace\",\"relationName\":\"PersonalCategoryToPersonalWorkspace\"},{\"name\":\"backingCategory\",\"kind\":\"object\",\"type\":\"Category\",\"relationName\":\"CategoryToPersonalCategory\"},{\"name\":\"boards\",\"kind\":\"object\",\"type\":\"PersonalBoard\",\"relationName\":\"PersonalBoardToPersonalCategory\"}],\"dbName\":null},\"PersonalBoard\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"boardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"workspaceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"categoryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"board\",\"kind\":\"object\",\"type\":\"Board\",\"relationName\":\"BoardToPersonalBoard\"},{\"name\":\"workspace\",\"kind\":\"object\",\"type\":\"PersonalWorkspace\",\"relationName\":\"PersonalBoardToPersonalWorkspace\"},{\"name\":\"category\",\"kind\":\"object\",\"type\":\"PersonalCategory\",\"relationName\":\"PersonalBoardToPersonalCategory\"}],\"dbName\":null},\"AllEnumsModel\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"platformEnum\",\"kind\":\"enum\",\"type\":\"Platforms\"},{\"name\":\"deviceEnum\",\"kind\":\"enum\",\"type\":\"Device\"},{\"name\":\"boardTypeEnum\",\"kind\":\"enum\",\"type\":\"BoardType\"},{\"name\":\"boardRoleEnum\",\"kind\":\"enum\",\"type\":\"BoardRole\"},{\"name\":\"categoryRoleEnum\",\"kind\":\"enum\",\"type\":\"CategoryRole\"},{\"name\":\"groupRoleEnum\",\"kind\":\"enum\",\"type\":\"GroupRole\"},{\"name\":\"registrationMethodEnum\",\"kind\":\"enum\",\"type\":\"RegistrationMethod\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"avatarUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mainGroupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"qrLoginRedirectDelay\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"mainLoginType\",\"kind\":\"enum\",\"type\":\"Platforms\"},{\"name\":\"loginMethods\",\"kind\":\"object\",\"type\":\"LoginMethod\",\"relationName\":\"LoginMethodToUser\"},{\"name\":\"invitedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"registrationMethod\",\"kind\":\"enum\",\"type\":\"RegistrationMethod\"},{\"name\":\"groupPermissions\",\"kind\":\"object\",\"type\":\"GroupPermission\",\"relationName\":\"GroupPermissionToUser\"},{\"name\":\"categoryPermissions\",\"kind\":\"object\",\"type\":\"CategoryPermission\",\"relationName\":\"CategoryPermissionToUser\"},{\"name\":\"boardPermissions\",\"kind\":\"object\",\"type\":\"BoardPermission\",\"relationName\":\"BoardPermissionToUser\"},{\"name\":\"flashcardProgress\",\"kind\":\"object\",\"type\":\"DeckProgress\",\"relationName\":\"DeckProgressToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"createdEvents\",\"kind\":\"object\",\"type\":\"Event\",\"relationName\":\"EventToUser\"},{\"name\":\"createdInvites\",\"kind\":\"object\",\"type\":\"Invite\",\"relationName\":\"InviteToUser\"},{\"name\":\"boardActivities\",\"kind\":\"object\",\"type\":\"UserBoardActivity\",\"relationName\":\"UserToUserBoardActivity\"},{\"name\":\"personalWorkspace\",\"kind\":\"object\",\"type\":\"PersonalWorkspace\",\"relationName\":\"PersonalWorkspaceToUser\"}],\"dbName\":null},\"Session\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"device\",\"kind\":\"enum\",\"type\":\"Device\"},{\"name\":\"locationEncrypted\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isQrLogin\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"lastUsed\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"LoginMethod\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"platform\",\"kind\":\"enum\",\"type\":\"Platforms\"},{\"name\":\"platformEmail\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"LoginMethodToUser\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
|
|
414
|
+
config.runtimeDataModel = JSON.parse("{\"models\":{\"Group\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"index\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"kind\",\"kind\":\"enum\",\"type\":\"GroupKind\"},{\"name\":\"ownerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"calCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"Event\",\"relationName\":\"EventToGroup\"},{\"name\":\"owner\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PersonalGroupOwner\"},{\"name\":\"categories\",\"kind\":\"object\",\"type\":\"Category\",\"relationName\":\"CategoryToGroup\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"GroupPermission\",\"relationName\":\"GroupToGroupPermission\"}],\"dbName\":null},\"Category\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"categoryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"index\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"group\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"CategoryToGroup\"},{\"name\":\"boards\",\"kind\":\"object\",\"type\":\"Board\",\"relationName\":\"BoardToCategory\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"CategoryPermission\",\"relationName\":\"CategoryToCategoryPermission\"}],\"dbName\":null},\"Board\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"boardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"index\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"version\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"BoardType\"},{\"name\":\"scheduledForDeletion\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"totalSizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"categoryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"object\",\"type\":\"Category\",\"relationName\":\"BoardToCategory\"},{\"name\":\"flashcardDeck\",\"kind\":\"object\",\"type\":\"FlashcardDeck\",\"relationName\":\"BoardToFlashcardDeck\"},{\"name\":\"files\",\"kind\":\"object\",\"type\":\"File\",\"relationName\":\"BoardToFile\"},{\"name\":\"boardPermission\",\"kind\":\"object\",\"type\":\"BoardPermission\",\"relationName\":\"BoardToBoardPermission\"},{\"name\":\"userActivities\",\"kind\":\"object\",\"type\":\"UserBoardActivity\",\"relationName\":\"BoardToUserBoardActivity\"}],\"dbName\":null},\"UserBoardActivity\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserBoardActivity\"},{\"name\":\"boardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"board\",\"kind\":\"object\",\"type\":\"Board\",\"relationName\":\"BoardToUserBoardActivity\"},{\"name\":\"totalSessions\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"totalActiveSeconds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"lastActivityAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"File\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fileId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"sizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"boardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"board\",\"kind\":\"object\",\"type\":\"Board\",\"relationName\":\"BoardToFile\"}],\"dbName\":null},\"Event\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"start\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"end\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"color\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"where\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"group\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"EventToGroup\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"creator\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"EventToUser\"}],\"dbName\":null},\"FlashcardDeck\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"deckId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"boardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"board\",\"kind\":\"object\",\"type\":\"Board\",\"relationName\":\"BoardToFlashcardDeck\"},{\"name\":\"cards\",\"kind\":\"object\",\"type\":\"FlashcardCard\",\"relationName\":\"FlashcardCardToFlashcardDeck\"},{\"name\":\"progress\",\"kind\":\"object\",\"type\":\"DeckProgress\",\"relationName\":\"DeckProgressToFlashcardDeck\"}],\"dbName\":null},\"FlashcardCard\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"front\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"back\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"index\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"deckId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"deck\",\"kind\":\"object\",\"type\":\"FlashcardDeck\",\"relationName\":\"FlashcardCardToFlashcardDeck\"}],\"dbName\":null},\"DeckProgress\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"deckId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"currentIndex\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"completed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"lastStudied\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"deck\",\"kind\":\"object\",\"type\":\"FlashcardDeck\",\"relationName\":\"DeckProgressToFlashcardDeck\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"DeckProgressToUser\"}],\"dbName\":null},\"GroupPermission\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"GroupRole\"},{\"name\":\"grantedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"grantedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"group\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"GroupToGroupPermission\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"GroupPermissionToUser\"}],\"dbName\":null},\"CategoryPermission\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"categoryId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"CategoryRole\"},{\"name\":\"grantedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"grantedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"object\",\"type\":\"Category\",\"relationName\":\"CategoryToCategoryPermission\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"CategoryPermissionToUser\"}],\"dbName\":null},\"BoardPermission\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"boardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"BoardRole\"},{\"name\":\"grantedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"grantedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"board\",\"kind\":\"object\",\"type\":\"Board\",\"relationName\":\"BoardToBoardPermission\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"BoardPermissionToUser\"}],\"dbName\":null},\"Invite\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupIds\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupRole\",\"kind\":\"enum\",\"type\":\"GroupRole\"},{\"name\":\"categoryIds\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"categoryRole\",\"kind\":\"enum\",\"type\":\"CategoryRole\"},{\"name\":\"boardIds\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"boardRole\",\"kind\":\"enum\",\"type\":\"BoardRole\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"maxUses\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"currentUses\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"creator\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"InviteToUser\"}],\"dbName\":null},\"AllEnumsModel\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"platformEnum\",\"kind\":\"enum\",\"type\":\"Platforms\"},{\"name\":\"deviceEnum\",\"kind\":\"enum\",\"type\":\"Device\"},{\"name\":\"boardTypeEnum\",\"kind\":\"enum\",\"type\":\"BoardType\"},{\"name\":\"boardRoleEnum\",\"kind\":\"enum\",\"type\":\"BoardRole\"},{\"name\":\"categoryRoleEnum\",\"kind\":\"enum\",\"type\":\"CategoryRole\"},{\"name\":\"groupRoleEnum\",\"kind\":\"enum\",\"type\":\"GroupRole\"},{\"name\":\"registrationMethodEnum\",\"kind\":\"enum\",\"type\":\"RegistrationMethod\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"avatarUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mainGroupId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"qrLoginRedirectDelay\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"mainLoginType\",\"kind\":\"enum\",\"type\":\"Platforms\"},{\"name\":\"loginMethods\",\"kind\":\"object\",\"type\":\"LoginMethod\",\"relationName\":\"LoginMethodToUser\"},{\"name\":\"invitedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"registrationMethod\",\"kind\":\"enum\",\"type\":\"RegistrationMethod\"},{\"name\":\"groupPermissions\",\"kind\":\"object\",\"type\":\"GroupPermission\",\"relationName\":\"GroupPermissionToUser\"},{\"name\":\"categoryPermissions\",\"kind\":\"object\",\"type\":\"CategoryPermission\",\"relationName\":\"CategoryPermissionToUser\"},{\"name\":\"boardPermissions\",\"kind\":\"object\",\"type\":\"BoardPermission\",\"relationName\":\"BoardPermissionToUser\"},{\"name\":\"flashcardProgress\",\"kind\":\"object\",\"type\":\"DeckProgress\",\"relationName\":\"DeckProgressToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"createdEvents\",\"kind\":\"object\",\"type\":\"Event\",\"relationName\":\"EventToUser\"},{\"name\":\"createdInvites\",\"kind\":\"object\",\"type\":\"Invite\",\"relationName\":\"InviteToUser\"},{\"name\":\"boardActivities\",\"kind\":\"object\",\"type\":\"UserBoardActivity\",\"relationName\":\"UserToUserBoardActivity\"},{\"name\":\"personalGroup\",\"kind\":\"object\",\"type\":\"Group\",\"relationName\":\"PersonalGroupOwner\"}],\"dbName\":null},\"Session\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"device\",\"kind\":\"enum\",\"type\":\"Device\"},{\"name\":\"locationEncrypted\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isQrLogin\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"lastUsed\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"LoginMethod\":{\"fields\":[{\"name\":\"dbId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"platform\",\"kind\":\"enum\",\"type\":\"Platforms\"},{\"name\":\"platformEmail\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerIssuer\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerSubject\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"LoginMethodToUser\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
|
|
431
415
|
defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
|
|
432
416
|
config.engineWasm = {
|
|
433
417
|
getRuntime: async () => require('./query_engine_bg.js'),
|
|
@@ -5,12 +5,15 @@ model Group {
|
|
|
5
5
|
name String
|
|
6
6
|
index Int
|
|
7
7
|
|
|
8
|
+
kind GroupKind @default(Shared)
|
|
9
|
+
ownerId String? @unique
|
|
10
|
+
|
|
8
11
|
calCode String?
|
|
9
12
|
events Event[]
|
|
10
13
|
|
|
14
|
+
owner User? @relation("PersonalGroupOwner", fields: [ownerId], references: [userId], onDelete: Cascade)
|
|
11
15
|
categories Category[]
|
|
12
16
|
permissions GroupPermission[]
|
|
13
|
-
personalWorkspace PersonalWorkspace?
|
|
14
17
|
|
|
15
18
|
}
|
|
16
19
|
|
|
@@ -26,7 +29,6 @@ model Category {
|
|
|
26
29
|
|
|
27
30
|
boards Board[]
|
|
28
31
|
permissions CategoryPermission[]
|
|
29
|
-
personalCategory PersonalCategory?
|
|
30
32
|
|
|
31
33
|
}
|
|
32
34
|
|
|
@@ -48,7 +50,6 @@ model Board {
|
|
|
48
50
|
category Category @relation(fields: [categoryId], references: [categoryId], onDelete: Cascade)
|
|
49
51
|
|
|
50
52
|
flashcardDeck FlashcardDeck?
|
|
51
|
-
personalBoard PersonalBoard?
|
|
52
53
|
|
|
53
54
|
files File[]
|
|
54
55
|
boardPermission BoardPermission[]
|
|
@@ -13,6 +13,7 @@ enum Platforms {
|
|
|
13
13
|
Discord
|
|
14
14
|
Google
|
|
15
15
|
GitHub
|
|
16
|
+
OIDC
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
enum Device {
|
|
@@ -47,6 +48,11 @@ enum GroupRole {
|
|
|
47
48
|
GroupAdmin // GroupManager + user/invite management
|
|
48
49
|
}
|
|
49
50
|
|
|
51
|
+
enum GroupKind {
|
|
52
|
+
Shared
|
|
53
|
+
Personal
|
|
54
|
+
}
|
|
55
|
+
|
|
50
56
|
enum RegistrationMethod {
|
|
51
57
|
direct
|
|
52
58
|
invite
|
|
@@ -26,7 +26,7 @@ model User {
|
|
|
26
26
|
createdEvents Event[]
|
|
27
27
|
createdInvites Invite[]
|
|
28
28
|
boardActivities UserBoardActivity[]
|
|
29
|
-
|
|
29
|
+
personalGroup Group? @relation("PersonalGroupOwner")
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
model Session {
|
|
@@ -55,8 +55,12 @@ model LoginMethod {
|
|
|
55
55
|
platform Platforms
|
|
56
56
|
platformEmail String
|
|
57
57
|
|
|
58
|
+
providerIssuer String?
|
|
59
|
+
providerSubject String?
|
|
60
|
+
|
|
58
61
|
userId String
|
|
59
62
|
user User @relation(fields: [userId], references: [userId], onDelete: Cascade)
|
|
60
63
|
|
|
61
64
|
@@unique([platform, platformEmail])
|
|
65
|
+
@@unique([platform, providerIssuer, providerSubject])
|
|
62
66
|
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Paginated, WithHeaders } from '../types';
|
|
2
|
-
import { BoardsManager } from '../core/manager';
|
|
3
|
-
import { AllRooms, RecentlyActiveRoom } from '../external/types';
|
|
4
|
-
import { GetUsersOutput } from './users';
|
|
5
|
-
export declare class APIAdmin {
|
|
6
|
-
private web;
|
|
7
|
-
constructor(web: BoardsManager);
|
|
8
|
-
getUsers({ auth, page, limit, ...rest }: AdminFunctionsInput['getUsers']): Promise<import("..").WebResponse<Paginated<GetUsersOutput>>>;
|
|
9
|
-
getActiveRooms({ auth, ...rest }: AdminFunctionsInput['getActiveRooms']): Promise<import("..").WebResponse<{
|
|
10
|
-
rooms: AllRooms;
|
|
11
|
-
recentlyActiveRooms: RecentlyActiveRoom[];
|
|
12
|
-
}>>;
|
|
13
|
-
}
|
|
14
|
-
export type AdminFunctionsInput = WithHeaders<{
|
|
15
|
-
'getUsers': {
|
|
16
|
-
auth: string;
|
|
17
|
-
page?: number;
|
|
18
|
-
limit?: number;
|
|
19
|
-
};
|
|
20
|
-
'getActiveRooms': {
|
|
21
|
-
auth: string;
|
|
22
|
-
};
|
|
23
|
-
}>;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// Data.
|
|
2
|
-
export class APIAdmin {
|
|
3
|
-
web;
|
|
4
|
-
constructor(web) {
|
|
5
|
-
this.web = web;
|
|
6
|
-
}
|
|
7
|
-
// Methods.
|
|
8
|
-
async getUsers({ auth, page, limit, ...rest }) {
|
|
9
|
-
return await this.web.request({
|
|
10
|
-
method: 'GET', auth, ...rest,
|
|
11
|
-
endpoint: this.web.qp('/admin/users', { page, limit }),
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
async getActiveRooms({ auth, ...rest }) {
|
|
15
|
-
return await this.web.request({
|
|
16
|
-
method: 'GET', auth, ...rest,
|
|
17
|
-
endpoint: this.web.qp('/admin/rooms'),
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { BoardsManager } from '../core/manager';
|
|
2
|
-
import { WithHeaders } from '../types';
|
|
3
|
-
export declare class APIAnalytics {
|
|
4
|
-
private web;
|
|
5
|
-
constructor(web: BoardsManager);
|
|
6
|
-
getGlobalAnalytics({ auth, ...rest }: AnalyticsFunctionsInput['getGlobalAnalytics']): Promise<import("..").WebResponse<UserBoardActivityWithUser[]>>;
|
|
7
|
-
getUserAnalytics({ auth, ...rest }: AnalyticsFunctionsInput['getUserAnalytics']): Promise<import("..").WebResponse<UserBoardActivityWithBoard[]>>;
|
|
8
|
-
getBoardAnalytics({ auth, boardId, categoryId, groupId, ...rest }: AnalyticsFunctionsInput['getBoardAnalytics']): Promise<import("..").WebResponse<UserBoardActivityWithUser[]>>;
|
|
9
|
-
getCategoryAnalytics({ auth, categoryId, groupId, ...rest }: AnalyticsFunctionsInput['getCategoryAnalytics']): Promise<import("..").WebResponse<UserBoardActivityWithUser[]>>;
|
|
10
|
-
getGroupAnalytics({ auth, groupId, ...rest }: AnalyticsFunctionsInput['getGroupAnalytics']): Promise<import("..").WebResponse<UserBoardActivityWithUser[]>>;
|
|
11
|
-
}
|
|
12
|
-
export type AnalyticsFunctionsInput = WithHeaders<{
|
|
13
|
-
'getGlobalAnalytics': {
|
|
14
|
-
auth: string;
|
|
15
|
-
};
|
|
16
|
-
'getUserAnalytics': {
|
|
17
|
-
auth: string;
|
|
18
|
-
};
|
|
19
|
-
'getBoardAnalytics': {
|
|
20
|
-
auth: string;
|
|
21
|
-
boardId: string;
|
|
22
|
-
categoryId: string;
|
|
23
|
-
groupId: string;
|
|
24
|
-
};
|
|
25
|
-
'getCategoryAnalytics': {
|
|
26
|
-
auth: string;
|
|
27
|
-
categoryId: string;
|
|
28
|
-
groupId: string;
|
|
29
|
-
};
|
|
30
|
-
'getGroupAnalytics': {
|
|
31
|
-
auth: string;
|
|
32
|
-
groupId: string;
|
|
33
|
-
};
|
|
34
|
-
}>;
|
|
35
|
-
export type ActivityAnalytics = {
|
|
36
|
-
totalSessions: number;
|
|
37
|
-
totalActiveSeconds: number;
|
|
38
|
-
lastActivityAt: Date;
|
|
39
|
-
};
|
|
40
|
-
export type BoardData = {
|
|
41
|
-
name: string;
|
|
42
|
-
boardId: string;
|
|
43
|
-
category: {
|
|
44
|
-
categoryId: string;
|
|
45
|
-
name: string;
|
|
46
|
-
group: {
|
|
47
|
-
groupId: string;
|
|
48
|
-
name: string;
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
export type UserBoardActivityWithBoard = ActivityAnalytics & {
|
|
53
|
-
board: BoardData;
|
|
54
|
-
};
|
|
55
|
-
export type UserBoardActivityWithUser = ActivityAnalytics & {
|
|
56
|
-
board: BoardData;
|
|
57
|
-
user: {
|
|
58
|
-
userId: string;
|
|
59
|
-
displayName: string;
|
|
60
|
-
avatarUrl: string | null;
|
|
61
|
-
};
|
|
62
|
-
};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// Data.
|
|
2
|
-
export class APIAnalytics {
|
|
3
|
-
web;
|
|
4
|
-
constructor(web) {
|
|
5
|
-
this.web = web;
|
|
6
|
-
}
|
|
7
|
-
// Methods.
|
|
8
|
-
async getGlobalAnalytics({ auth, ...rest }) {
|
|
9
|
-
return await this.web.request({
|
|
10
|
-
method: 'GET', auth, ...rest,
|
|
11
|
-
endpoint: this.web.qp('/analytics'),
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
async getUserAnalytics({ auth, ...rest }) {
|
|
15
|
-
return await this.web.request({
|
|
16
|
-
method: 'GET', auth, ...rest,
|
|
17
|
-
endpoint: this.web.qp('/analytics/user'),
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
async getBoardAnalytics({ auth, boardId, categoryId, groupId, ...rest }) {
|
|
21
|
-
return await this.web.request({
|
|
22
|
-
method: 'GET', auth, ...rest,
|
|
23
|
-
endpoint: this.web.qp(`/groups/${groupId}/categories/${categoryId}/boards/${boardId}/analytics`),
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
async getCategoryAnalytics({ auth, categoryId, groupId, ...rest }) {
|
|
27
|
-
return await this.web.request({
|
|
28
|
-
method: 'GET', auth, ...rest,
|
|
29
|
-
endpoint: this.web.qp(`/groups/${groupId}/categories/${categoryId}/analytics`),
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
async getGroupAnalytics({ auth, groupId, ...rest }) {
|
|
33
|
-
return await this.web.request({
|
|
34
|
-
method: 'GET', auth, ...rest,
|
|
35
|
-
endpoint: this.web.qp(`/groups/${groupId}/analytics`),
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
}
|