@excali-boards/boards-api-client 1.1.74 → 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.
@@ -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
- categories Category[]
12
- permissions GroupPermission[]
13
- personalWorkspace PersonalWorkspace?
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 Board[]
27
- permissions CategoryPermission[]
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"
@@ -335,6 +293,11 @@ enum GroupRole {
335
293
  GroupAdmin // GroupManager + user/invite management
336
294
  }
337
295
 
296
+ enum GroupKind {
297
+ Shared
298
+ Personal
299
+ }
300
+
338
301
  enum RegistrationMethod {
339
302
  direct
340
303
  invite
@@ -379,11 +342,11 @@ model User {
379
342
 
380
343
  flashcardProgress DeckProgress[]
381
344
 
382
- sessions Session[]
383
- createdEvents Event[]
384
- createdInvites Invite[]
385
- boardActivities UserBoardActivity[]
386
- personalWorkspace PersonalWorkspace?
345
+ sessions Session[]
346
+ createdEvents Event[]
347
+ createdInvites Invite[]
348
+ boardActivities UserBoardActivity[]
349
+ personalGroup Group? @relation("PersonalGroupOwner")
387
350
  }
388
351
 
389
352
  model Session {
@@ -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',
@@ -349,6 +327,11 @@ exports.GroupRole = exports.$Enums.GroupRole = {
349
327
  GroupAdmin: 'GroupAdmin'
350
328
  };
351
329
 
330
+ exports.GroupKind = exports.$Enums.GroupKind = {
331
+ Shared: 'Shared',
332
+ Personal: 'Personal'
333
+ };
334
+
352
335
  exports.RegistrationMethod = exports.$Enums.RegistrationMethod = {
353
336
  direct: 'direct',
354
337
  invite: 'invite',
@@ -369,9 +352,6 @@ exports.Prisma.ModelName = {
369
352
  CategoryPermission: 'CategoryPermission',
370
353
  BoardPermission: 'BoardPermission',
371
354
  Invite: 'Invite',
372
- PersonalWorkspace: 'PersonalWorkspace',
373
- PersonalCategory: 'PersonalCategory',
374
- PersonalBoard: 'PersonalBoard',
375
355
  AllEnumsModel: 'AllEnumsModel',
376
356
  User: 'User',
377
357
  Session: 'Session',
@@ -425,13 +405,13 @@ const config = {
425
405
  }
426
406
  }
427
407
  },
428
- "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 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 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 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",
429
- "inlineSchemaHash": "8547d5bc0183a0d97e3b67ceb5bc25506abdfeadeedca8ed4a8d69afa55446a7",
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",
430
410
  "copyEngine": true
431
411
  }
432
412
  config.dirname = '/'
433
413
 
434
- 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\":\"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\":{}}")
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\":{}}")
435
415
  defineDmmfProperty(exports.Prisma, config.runtimeDataModel)
436
416
  config.engineWasm = {
437
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[]
@@ -48,6 +48,11 @@ enum GroupRole {
48
48
  GroupAdmin // GroupManager + user/invite management
49
49
  }
50
50
 
51
+ enum GroupKind {
52
+ Shared
53
+ Personal
54
+ }
55
+
51
56
  enum RegistrationMethod {
52
57
  direct
53
58
  invite
@@ -26,7 +26,7 @@ model User {
26
26
  createdEvents Event[]
27
27
  createdInvites Invite[]
28
28
  boardActivities UserBoardActivity[]
29
- personalWorkspace PersonalWorkspace?
29
+ personalGroup Group? @relation("PersonalGroupOwner")
30
30
  }
31
31
 
32
32
  model Session {
@@ -1,42 +0,0 @@
1
- model PersonalWorkspace {
2
- dbId String @id @default(uuid())
3
- userId String @unique
4
- groupId String @unique
5
-
6
- user User @relation(fields: [userId], references: [userId], onDelete: Cascade)
7
- group Group @relation(fields: [groupId], references: [groupId], onDelete: Cascade)
8
- categories PersonalCategory[]
9
- boards PersonalBoard[]
10
-
11
- createdAt DateTime @default(now())
12
- updatedAt DateTime @updatedAt
13
- }
14
-
15
- model PersonalCategory {
16
- dbId String @id @default(uuid())
17
- categoryId String @unique
18
- workspaceId String
19
- backingCategoryId String @unique
20
- name String
21
- index Int
22
-
23
- workspace PersonalWorkspace @relation(fields: [workspaceId], references: [dbId], onDelete: Cascade)
24
- backingCategory Category @relation(fields: [backingCategoryId], references: [categoryId], onDelete: Cascade)
25
- boards PersonalBoard[]
26
-
27
- @@index([workspaceId, index])
28
- }
29
-
30
- model PersonalBoard {
31
- dbId String @id @default(uuid())
32
- boardId String @unique
33
- workspaceId String
34
- categoryId String
35
-
36
- board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)
37
- workspace PersonalWorkspace @relation(fields: [workspaceId], references: [dbId], onDelete: Cascade)
38
- category PersonalCategory @relation(fields: [categoryId], references: [dbId], onDelete: Cascade)
39
-
40
- @@index([workspaceId])
41
- @@index([categoryId])
42
- }