Files
ayristech-youtube/prisma/schema.prisma
T

175 lines
4.4 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
}
enum Role {
ADMIN
USER
}
model User {
id String @id @default(cuid())
name String?
email String @unique
password String?
role Role @default(USER)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
accounts Account[]
sessions Session[]
}
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 VerificationToken {
identifier String
token String @unique
expires DateTime
@@unique([identifier, token])
}
model Category {
id String @id @default(cuid())
name String @unique
slug String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Lesson {
id String @id @default(cuid())
slug String @unique
title String
youtubeId String
youtubeUrl String
thumbnailUrl String
duration String
publishDate DateTime @default(now())
category String
tags String[]
viewsCount Int @default(0)
downloadCount Int @default(0)
likesCount Int @default(0)
summary String @db.Text
notesMarkdown String[]
isFeatured Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
codeSnippets CodeSnippet[]
downloads ResourceDownload[]
chapters VideoChapter[]
}
model CodeSnippet {
id String @id @default(cuid())
fileName String
language String
code String @db.Text
description String?
lessonId String
lesson Lesson @relation(fields: [lessonId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
}
model ResourceDownload {
id String @id @default(cuid())
title String
type String // zip, github, pdf, link
url String
size String?
lessonId String
lesson Lesson @relation(fields: [lessonId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
}
model VideoChapter {
id String @id @default(cuid())
time String
seconds Int
title String
lessonId String
lesson Lesson @relation(fields: [lessonId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
}
model Cheatsheet {
id String @id @default(cuid())
slug String @unique
title String
category String
description String @db.Text
tags String[]
lastUpdated DateTime @default(now())
createdAt DateTime @default(now())
items CheatsheetItem[]
}
model CheatsheetItem {
id String @id @default(cuid())
command String
description String
example String?
cheatsheetId String
cheatsheet Cheatsheet @relation(fields: [cheatsheetId], references: [id], onDelete: Cascade)
}
model ContactMessage {
id String @id @default(cuid())
name String
email String
subject String
message String @db.Text
isRead Boolean @default(false)
createdAt DateTime @default(now())
}
model Setting {
id String @id @default(cuid())
key String @unique
value String @db.Text
updatedAt DateTime @updatedAt
}
model Prompt {
id String @id @default(cuid())
title String
slug String @unique
category String
description String @db.Text
content String @db.Text
tags String[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}