// 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" } datasource db { provider = "sqlite" url = env("DATABASE_URL") } model Song { id Int @id @default(autoincrement()) title String artist String filename String // Filename in public/uploads coverImage String? // Filename in public/uploads/covers createdAt DateTime @default(now()) puzzles DailyPuzzle[] genres Genre[] specials SpecialSong[] } model Genre { id Int @id @default(autoincrement()) name String @unique songs Song[] dailyPuzzles DailyPuzzle[] } model Special { id Int @id @default(autoincrement()) name String @unique maxAttempts Int @default(7) unlockSteps String // JSON string: e.g. "[2, 4, 7, 11, 16, 30]" createdAt DateTime @default(now()) launchDate DateTime? endDate DateTime? songs SpecialSong[] puzzles DailyPuzzle[] } model SpecialSong { id Int @id @default(autoincrement()) specialId Int special Special @relation(fields: [specialId], references: [id], onDelete: Cascade) songId Int song Song @relation(fields: [songId], references: [id], onDelete: Cascade) startTime Int @default(0) // Start time in seconds order Int? // For manual ordering @@unique([specialId, songId]) } model DailyPuzzle { id Int @id @default(autoincrement()) date String // Format: YYYY-MM-DD songId Int song Song @relation(fields: [songId], references: [id]) genreId Int? genre Genre? @relation(fields: [genreId], references: [id]) specialId Int? special Special? @relation(fields: [specialId], references: [id]) @@unique([date, genreId, specialId]) }