-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathschema.prisma
140 lines (124 loc) · 4.44 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
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
previewFeatures = ["extendedWhereUnique"]
}
datasource db {
provider = "postgresql"
// NOTE: When using postgresql, mysql or sqlserver, uncomment the @db.Text annotations in model Account below
// Further reading:
// https://next-auth.js.org/adapters/prisma#create-the-prisma-schema
// https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#string
url = env("DATABASE_URL")
directUrl = env("DATABASE_DIRECT_URL")
}
enum Role {
FREEUSER
PREMIUMUSER
ADMIN
SUPERADMIN
}
model Example {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
// Necessary for Next auth
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)
}
model User {
id String @id @default(cuid())
name String?
email String? @unique
emailVerified DateTime?
image String?
accounts Account[]
sessions Session[]
savedSnippets SavedSnippets[]
notifyUser NotifyUser[]
logSearch LogSearch[]
role Role @default(FREEUSER)
searchQuota Int @default(7) //Need to refresh daily. Consider using AWS Lambda. Update to 40 if PREMIUMUSER.
generateQuota Int @default(5) //Update to 20 and refresh daily if PREMIUMUSER. Consider using AWS Lambda.
bookmarkQuota Int @default(5) //Need to refresh daily. Consider using AWS Lambda. 100 if PREMIUMUSER.
//noteQuota needs to be calculated on client-side, based on the note count on that specific snippetId. Unlimited if PREMIUMUSER.
}
model VerificationToken {
identifier String
token String @unique
expires DateTime
@@unique([identifier, token])
}
model SurahMetadata {
id String @id @unique
surahNumber Int
surahName String
surahTName String
surahEName String
surahType String
}
model Verses {
id String @id @unique
verseText String
verseTranslation String?
verseNumber String
surahNumber String
}
//One-to-many, Users-SavedSnippets
//We are not relating directly to Verses to avoid a many-to-many relationship
model SavedSnippets {
id String @id @default(cuid())
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
verseId String
userNotes UserNotes[]
}
//Many-to-one, UserNotes-SavedSnippets
//If a SavedSnippets row gets deleted, all related UserNotes are deleted
model UserNotes {
id String @id @default(cuid())
snippetId String
savedSnippets SavedSnippets @relation(fields: [snippetId], references: [id], onDelete: Cascade)
content String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model NotifyUser {
id String @id @default(cuid())
userId String @unique
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
modalDisplayed Boolean @default(false)
isInNotifyList Boolean?
}
//To log searches for troubleshooting purposes
model LogSearch {
id String @id @default(cuid())
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
prompt String
result String
responseObj String?
}