datasource db { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" } model User { id String @id @default(uuid()) pubkey String @unique username String? @unique avatar String? purchased Purchase[] courses Course[] resources Resource[] courseDrafts CourseDraft[] drafts Draft[] role Role? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Role { id String @id @default(uuid()) user User @relation(fields: [userId], references: [id]) userId String @unique subscribed Boolean @default(false) admin Boolean @default(false) subscriptionStartDate DateTime? lastPaymentAt DateTime? subscriptionExpiredAt DateTime? nwc String? } model Purchase { id String @id @default(uuid()) user User @relation(fields: [userId], references: [id]) userId String course Course? @relation(fields: [courseId], references: [id]) courseId String? resource Resource? @relation(fields: [resourceId], references: [id]) resourceId String? amountPaid Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Lesson { id String @id @default(uuid()) courseId String? course Course? @relation(fields: [courseId], references: [id]) resourceId String? resource Resource? @relation(fields: [resourceId], references: [id]) draftId String? draft Draft? @relation(fields: [draftId], references: [id]) index Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model DraftLesson { id String @id @default(uuid()) courseDraftId String courseDraft CourseDraft @relation(fields: [courseDraftId], references: [id]) resourceId String? resource Resource? @relation(fields: [resourceId], references: [id]) draftId String? draft Draft? @relation(fields: [draftId], references: [id]) index Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Course { id String @id userId String user User @relation(fields: [userId], references: [id]) price Int @default(0) lessons Lesson[] purchases Purchase[] noteId String? @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Resource { id String @id // Client generates UUID userId String user User @relation(fields: [userId], references: [id]) lessons Lesson[] draftLessons DraftLesson[] price Int @default(0) purchases Purchase[] noteId String? @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Draft { id String @id @default(uuid()) userId String user User @relation(fields: [userId], references: [id]) type String title String summary String content String image String? price Int? @default(0) topics String[] additionalLinks String[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt draftLessons DraftLesson[] lessons Lesson[] } model CourseDraft { id String @id @default(uuid()) userId String user User @relation(fields: [userId], references: [id]) draftLessons DraftLesson[] title String summary String image String? price Int? @default(0) topics String[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt }