-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
schema.prisma
142 lines (115 loc) · 3.47 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
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
datasource db {
provider = "postgres"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model Account {
id String @id @default(cuid())
userId String
type String
provider String
providerAccountId String
refresh_token String? @db.Text
access_token String? @db.Text
expires_at Int?
token_type String?
scope String?
id_token String? @db.Text
session_state String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([provider, providerAccountId])
}
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
enum UserRole {
ADMIN
CONTENT_CREATOR
USER
}
model User {
id String @id @default(cuid())
name String?
email String? @unique
emailVerified DateTime?
image String?
accounts Account[]
sessions Session[]
isActive Boolean @default(true)
enrolledCourses Course[]
role UserRole @default(USER)
createdAt DateTime @default(now())
}
model VerificationToken {
identifier String
token String @unique
expires DateTime
@@unique([identifier, token])
}
model Course {
id String @id @default(uuid())
name String
price Float
thumbnail String
description String @default("") @db.Text
reviews Review[]
featured Boolean @default(false)
published Boolean @default(false)
content String @default("") @db.Text
// Relations
enrolledUsers User[]
category Category @relation(fields: [categoryId], references: [id], onDelete: Cascade, onUpdate: Cascade)
categoryId String
Module Module[]
// To return `Date`s intact through the API we need to add data transformers
// https://trpc.io/docs/data-transformers
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
}
model Module {
id String @id @default(uuid())
name String
description String @default("") @db.Text
pdfFilePath String
audioFilePath String
course Course @relation(fields: [courseId], references: [id])
courseId String
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
}
model Review {
id String @id @default(uuid())
rating Float
comment String @db.Text
Course Course @relation(fields: [courseId], references: [id], onDelete: Cascade)
courseId String
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
}
model Category {
id String @id @default(uuid())
name String @unique
Courses Course[]
thumbnail String
// To return `Date`s intact through the API we need to add data transformers
// https://trpc.io/docs/data-transformers
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
}
model Image {
storedFileName String @id @default(cuid())
originalFileName String
path String
// To return `Date`s intact through the API we need to add data transformers
// https://trpc.io/docs/data-transformers
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
}