-
Notifications
You must be signed in to change notification settings - Fork 1
/
schema.test.prisma
120 lines (106 loc) · 3.73 KB
/
schema.test.prisma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
generator client {
provider = "prisma-client-js"
previewFeatures = ["referentialIntegrity"]
binaryTargets = [env("PRISMA_BINARY_TARGET")]
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
referentialIntegrity = "prisma"
}
enum RoleName {
user
admin
}
enum OauthProvider {
email
github
google
stackoverflow
}
enum SnippetVisibility {
public
private
}
model Role {
id String @id @db.VarChar(50)
name RoleName @unique
level Int
description String? @db.VarChar(200)
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
User User[]
@@map("roles")
}
model User {
id String @id @db.VarChar(50)
email String @unique @db.VarChar(100)
password String? @db.VarChar(100)
username String? @db.VarChar(50)
name String @db.VarChar(50)
timezone String? @db.VarChar(50)
isEnabled Boolean @default(false) @map("is_enabled") @db.TinyInt
pictureUrl String? @map("picture_url") @db.VarChar(255)
roleId String @map("role_id") @db.VarChar(50)
oauthProvider OauthProvider
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
role Role @relation(fields: [roleId], references: [id], onDelete: Restrict)
folders Folder[]
snippets Snippet[]
sessions Session[]
@@index([username])
@@index([roleId])
@@map("users")
}
model Folder {
id String @id @db.VarChar(50)
userId String @map("user_id") @db.VarChar(50)
parentId String? @map("parent_id")
name String @db.VarChar(255)
isFavorite Boolean @default(false) @map("is_favorite")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
parent Folder? @relation(name: "parent_folder", fields: [parentId], references: [id], onDelete: NoAction, onUpdate: NoAction)
subFolders Folder[] @relation("parent_folder")
snippets Snippet[]
@@index([name])
@@index([isFavorite])
@@index([userId])
@@index([parentId])
@@unique([userId, parentId, name], name: "folder_name_unique_constraint")
@@map("folders")
}
model Snippet {
id String @id @db.VarChar(50)
userId String @map("user_id") @db.VarChar(50)
folderId String @map("folder_id")
name String @db.VarChar(255)
content String @db.Text
language String @db.VarChar(20)
size Int @default(0) @db.Int
visibility SnippetVisibility @default(public)
description String? @db.Text
lineHighlight String? @db.Text @map("line_highlight")
theme String @db.VarChar(20)
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
user User @relation(fields: [userId], references: [id], onDelete: Restrict)
folder Folder @relation(fields: [folderId], references: [id], onDelete: Cascade)
@@index([name])
@@index([userId])
@@index([folderId])
@@index([language])
@@index([visibility])
@@map("snippets")
}
model Session {
id String @id @default(cuid())
token String @unique
userId String @map("user_id")
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId])
@@map("sessions")
}