mirror of
https://github.com/ershisan99/flashcards-api.git
synced 2025-12-16 20:59:26 +00:00
158 lines
4.5 KiB
Plaintext
158 lines
4.5 KiB
Plaintext
datasource db {
|
|
provider = "mysql"
|
|
url = env("DATABASE_URL")
|
|
relationMode = "prisma"
|
|
}
|
|
|
|
generator client {
|
|
provider = "prisma-client-js"
|
|
previewFeatures = ["fullTextSearch", "fullTextIndex"]
|
|
}
|
|
|
|
model Verification {
|
|
id String @id @default(cuid())
|
|
userId String @unique
|
|
isEmailVerified Boolean @default(false)
|
|
verificationToken String? @unique @default(uuid())
|
|
verificationTokenExpiry DateTime?
|
|
verificationEmailsSent Int @default(0)
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model User {
|
|
id String @id @default(uuid())
|
|
email String @unique
|
|
password String
|
|
isAdmin Boolean @default(false)
|
|
isEmailVerified Boolean @default(false)
|
|
name String @db.VarChar(40)
|
|
avatar String?
|
|
deckCount Int @default(0)
|
|
isDeleted Boolean? @default(false)
|
|
deleteTime Int?
|
|
created DateTime @default(now())
|
|
updated DateTime @updatedAt
|
|
cards Card[]
|
|
decks Deck[]
|
|
grades Grade[]
|
|
generalChatMessages GeneralChatMessage[]
|
|
verification Verification?
|
|
RevokedToken RevokedToken[]
|
|
RefreshToken RefreshToken[]
|
|
ResetPassword ResetPassword?
|
|
|
|
@@fulltext([name, email])
|
|
}
|
|
|
|
model RevokedToken {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
token String @unique
|
|
revokedAt DateTime @default(now())
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model RefreshToken {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
token String @unique @db.VarChar(255)
|
|
expiresAt DateTime
|
|
isRevoked Boolean @default(false)
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model ResetPassword {
|
|
id String @id @default(cuid())
|
|
userId String @unique
|
|
resetPasswordToken String? @unique @default(uuid())
|
|
resetPasswordTokenExpiry DateTime?
|
|
resetPasswordEmailsSent Int @default(0)
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model Card {
|
|
id String @id @default(cuid())
|
|
deckId String
|
|
userId String
|
|
question String @db.Text
|
|
answer String @db.Text
|
|
grade Int @default(0)
|
|
shots Int @default(0)
|
|
questionImg String?
|
|
answerImg String?
|
|
answerVideo String?
|
|
questionVideo String?
|
|
comments String?
|
|
type String?
|
|
rating Int @default(0)
|
|
moreId String?
|
|
created DateTime @default(now())
|
|
updated DateTime @updatedAt
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
decks Deck @relation(fields: [deckId], references: [id], onDelete: Cascade)
|
|
grades Grade[]
|
|
|
|
@@index([userId])
|
|
@@index([deckId])
|
|
}
|
|
|
|
model Deck {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
name String
|
|
isPrivate Boolean @default(false)
|
|
shots Int @default(0)
|
|
cover String?
|
|
rating Int @default(0)
|
|
isDeleted Boolean?
|
|
isBlocked Boolean?
|
|
created DateTime @default(now())
|
|
updated DateTime @updatedAt
|
|
user User @relation(fields: [userId], references: [id])
|
|
Card Card[]
|
|
Grade Grade[]
|
|
|
|
@@index([userId])
|
|
}
|
|
|
|
model Grade {
|
|
id String @id @default(cuid())
|
|
deckId String
|
|
cardId String
|
|
userId String
|
|
grade Int
|
|
shots Int
|
|
moreId String?
|
|
created DateTime @default(now())
|
|
updated DateTime @updatedAt
|
|
user User @relation(fields: [userId], references: [id])
|
|
card Card @relation(fields: [cardId], references: [id])
|
|
decks Deck @relation(fields: [deckId], references: [id])
|
|
|
|
@@index([userId])
|
|
@@index([deckId])
|
|
@@index([cardId])
|
|
}
|
|
|
|
model GeneralChatMessage {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
userName String
|
|
isAdmin Boolean
|
|
avatar String?
|
|
message String
|
|
created DateTime @default(now())
|
|
updated DateTime @updatedAt
|
|
user User @relation(fields: [userId], references: [id])
|
|
|
|
@@index([userId])
|
|
}
|