forked from code100x/cms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathschema.prisma
280 lines (252 loc) · 9.08 KB
/
schema.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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "linux-musl-arm64-openssl-3.0.x"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Course {
id Int @id @default(autoincrement())
appxCourseId Int
discordRoleId String
title String
imageUrl String
description String
openToEveryone Boolean @default(false)
slug String
content CourseContent[]
purchasedBy UserPurchases[]
certificate Certificate[]
certIssued Boolean @default(false)
}
model UserPurchases {
user User @relation(fields: [userId], references: [id])
userId String
course Course @relation(fields: [courseId], references: [id])
courseId Int
assignedAt DateTime @default(now())
@@id([userId, courseId])
}
model Content {
id Int @id @default(autoincrement())
type String @default("folder")
title String
hidden Boolean @default(false)
description String?
thumbnail String?
parentId Int?
parent Content? @relation("ContentToContent", fields: [parentId], references: [id])
videoProgress VideoProgress[]
children Content[] @relation("ContentToContent")
courses CourseContent[]
createdAt DateTime @default(now())
VideoMetadata VideoMetadata?
NotionMetadata NotionMetadata?
notionMetadataId Int?
comments Comment[]
commentsCount Int @default(0)
bookmark Bookmark[]
}
model CourseContent {
course Course @relation(fields: [courseId], references: [id])
courseId Int
content Content @relation(fields: [contentId], references: [id])
contentId Int
@@id([courseId, contentId])
}
model Certificate {
id String @id @default(cuid())
slug String @default("certId")
user User @relation(fields: [userId], references: [id])
userId String
course Course @relation(fields: [courseId], references: [id])
courseId Int
@@unique([userId, courseId])
}
model NotionMetadata {
id Int @id @default(autoincrement())
contentId Int
content Content @relation(fields: [contentId], references: [id])
notionId String
@@unique([contentId])
}
model VideoMetadata {
id Int @id @default(autoincrement())
contentId Int
video_1080p_mp4_1 String? // Link to 1080p mp4 quality video variant 1
video_1080p_mp4_2 String? // Link to 1080p mp4 quality video variant 2
video_1080p_mp4_3 String? // Link to 1080p mp4 quality video variant 3
video_1080p_mp4_4 String? // Link to 1080p mp4 quality video variant 4
video_1080p_1 String? // Link to 1080p quality video variant 1
video_1080p_2 String? // Link to 1080p quality video variant 2
video_1080p_3 String? // Link to 1080p quality video variant 3
video_1080p_4 String? // Link to 1080p quality video variant 4
video_720p_mp4_1 String? // Link to 720p mp4 quality video variant 1
video_720p_mp4_2 String? // Link to 720p mp4 quality video variant 2
video_720p_mp4_3 String? // Link to 720p mp4 quality video variant 3
video_720p_mp4_4 String? // Link to 720p mp4 quality video variant 4
video_720p_1 String? // Link to 720p quality video variant 1
video_720p_2 String? // Link to 720p quality video variant 2
video_720p_3 String? // Link to 720p quality video variant 3
video_720p_4 String? // Link to 720p quality video variant 4
video_360p_mp4_1 String? // Link to 360p mp4 quality video variant 1
video_360p_mp4_2 String? // Link to 360p mp4 quality video variant 2
video_360p_mp4_3 String? // Link to 360p mp4 quality video variant 3
video_360p_mp4_4 String? // Link to 360p mp4 quality video variant 4
video_360p_1 String? // Link to 360p quality video variant 1
video_360p_2 String? // Link to 360p quality video variant 2
video_360p_3 String? // Link to 360p quality video variant 3
video_360p_4 String? // Link to 360p quality video variant 4
subtitles String? // Link to subtitles file
segments Json?
content Content @relation(fields: [contentId], references: [id])
slides String? // link to slides
thumbnail_mosiac_url String?
duration Int?
@@unique([contentId])
}
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model User {
id String @id @default(cuid())
name String?
email String? @unique
token String?
sessions Session[]
purchases UserPurchases[]
videoProgress VideoProgress[]
comments Comment[]
votes Vote[]
discordConnect DiscordConnect?
disableDrm Boolean @default(false)
bookmarks Bookmark[]
password String?
appxUserId String?
appxUsername String?
questions Question[]
answers Answer[]
certificate Certificate[]
}
model DiscordConnect {
id String @id @default(cuid())
username String
discordId String @unique
userId String @unique
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model DiscordConnectBulk {
id String @id @default(cuid())
username String
discordId String
userId String
}
model VideoProgress {
id Int @id @default(autoincrement())
userId String
contentId Int
currentTimestamp Int
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
content Content @relation(fields: [contentId], references: [id], onDelete: Cascade)
markAsCompleted Boolean @default(false)
updatedAt DateTime @default(now()) @updatedAt
@@unique([contentId, userId])
}
model Bookmark {
id Int @id @default(autoincrement())
userId String
contentId Int
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
content Content @relation(fields: [contentId], references: [id])
createdAt DateTime @default(now())
}
model Comment {
id Int @id @default(autoincrement())
content String
commentType CommentType @default(DEFAULT)
approved Boolean @default(false)
contentId Int
commentedOn Content @relation(fields: [contentId], references: [id])
parentId Int?
parent Comment? @relation("ParentComment", fields: [parentId], references: [id])
children Comment[] @relation("ParentComment")
userId String
user User @relation(fields: [userId], references: [id])
upvotes Int @default(0)
downvotes Int @default(0)
repliesCount Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
votes Vote[]
isPinned Boolean @default(false)
}
model Question {
id Int @id @default(autoincrement())
title String
content String
slug String @unique
createdAt DateTime @default(now())
author User @relation(fields: [authorId], references: [id])
authorId String
upvotes Int @default(0)
downvotes Int @default(0)
totalanswers Int @default(0)
answers Answer[]
votes Vote[]
tags String[]
updatedAt DateTime @updatedAt
@@index([authorId])
}
model Answer {
id Int @id @default(autoincrement())
content String
createdAt DateTime @default(now())
question Question @relation(fields: [questionId], references: [id])
questionId Int
author User @relation(fields: [authorId], references: [id])
authorId String
votes Vote[]
upvotes Int @default(0)
downvotes Int @default(0)
totalanswers Int @default(0)
parentId Int?
responses Answer[] @relation("AnswerToAnswer")
parent Answer? @relation("AnswerToAnswer", fields: [parentId], references: [id])
updatedAt DateTime @updatedAt
@@index([questionId])
@@index([authorId])
@@index([parentId])
}
model Vote {
id Int @id @default(autoincrement())
questionId Int?
question Question? @relation(fields: [questionId], references: [id])
answerId Int?
answer Answer? @relation(fields: [answerId], references: [id])
commentId Int?
comment Comment? @relation(fields: [commentId], references: [id])
userId String
user User @relation(fields: [userId], references: [id])
voteType VoteType
createdAt DateTime @default(now())
@@unique([questionId, userId])
@@unique([answerId, userId])
@@unique([commentId, userId])
}
enum VoteType {
UPVOTE
DOWNVOTE
}
enum PostType {
QUESTION
ANSWER
}
enum CommentType {
INTRO
DEFAULT
}