// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema // Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? // Try Prisma Accelerate: https://pris.ly/cli/accelerate-init generator client { provider = "prisma-client-js" } datasource db { provider = "mongodb" url = env("DATABASE_URL") } model Game { id String @id @default(auto()) @map("_id") @db.ObjectId title String platform String? status GameStatus dateAdded DateTime @default(now()) dateCompleted DateTime? rating Int? @db.Int @default(0) notes String? coverImage String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt comments Comment[] } enum GameStatus { PLAYING COMPLETED BACKLOG } model Book { id String @id @default(auto()) @map("_id") @db.ObjectId title String author String isbn String? status BookStatus dateAdded DateTime @default(now()) dateFinished DateTime? rating Int? @db.Int @default(0) notes String? coverImage String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt comments Comment[] } enum BookStatus { READING FINISHED TO_READ } model Music { id String @id @default(auto()) @map("_id") @db.ObjectId title String artist String type MusicType status MusicStatus dateAdded DateTime @default(now()) dateCompleted DateTime? rating Int? @db.Int @default(0) notes String? coverArt String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt comments Comment[] } enum MusicType { ALBUM SINGLE EP } enum MusicStatus { LISTENING COMPLETED WANT_TO_LISTEN } model Art { id String @id @default(auto()) @map("_id") @db.ObjectId title String artist String description String? imageUrl String dateAdded DateTime @default(now()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt comments Comment[] } model Show { id String @id @default(auto()) @map("_id") @db.ObjectId title String type ShowType status ShowStatus dateAdded DateTime @default(now()) dateCompleted DateTime? rating Int? @db.Int @default(0) notes String? coverImage String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt comments Comment[] } enum ShowType { TV_SERIES ANIME FILM DOCUMENTARY } enum ShowStatus { WATCHING COMPLETED WANT_TO_WATCH } model Manga { id String @id @default(auto()) @map("_id") @db.ObjectId title String author String status MangaStatus dateAdded DateTime @default(now()) dateCompleted DateTime? rating Int? @db.Int @default(0) notes String? coverImage String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt comments Comment[] } enum MangaStatus { READING COMPLETED WANT_TO_READ } model User { id String @id @default(auto()) @map("_id") @db.ObjectId discordId String @unique username String email String @unique avatar String? isAdmin Boolean @default(false) isBanned Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt comments Comment[] } model Comment { id String @id @default(auto()) @map("_id") @db.ObjectId content String userId String @db.ObjectId user User @relation(fields: [userId], references: [id]) gameId String? @db.ObjectId game Game? @relation(fields: [gameId], references: [id]) bookId String? @db.ObjectId book Book? @relation(fields: [bookId], references: [id]) musicId String? @db.ObjectId music Music? @relation(fields: [musicId], references: [id]) artId String? @db.ObjectId art Art? @relation(fields: [artId], references: [id]) showId String? @db.ObjectId show Show? @relation(fields: [showId], references: [id]) mangaId String? @db.ObjectId manga Manga? @relation(fields: [mangaId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model AuditLog { id String @id @default(auto()) @map("_id") @db.ObjectId action AuditAction category AuditCategory userId String? @db.ObjectId targetUserId String? @db.ObjectId resourceType String? resourceId String? details String? userAgent String? success Boolean @default(true) createdAt DateTime @default(now()) } enum AuditAction { LOGIN LOGOUT LOGIN_FAILED COMMENT_CREATE COMMENT_DELETE ENTRY_CREATE ENTRY_UPDATE ENTRY_DELETE USER_BAN USER_UNBAN RATE_LIMIT_EXCEEDED CSRF_VALIDATION_FAILED UNAUTHORIZED_ACCESS } enum AuditCategory { AUTH CONTENT ADMIN SECURITY }