// 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" output = "../node_modules/@prisma/client/.prisma/client" } datasource db { provider = "postgresql" } // Seed configuration // Run with: npm run db:seed model User { id String @id @default(cuid()) name String email String @unique passwordHash String role Role @default(USER) points Int @default(0) createdAt DateTime @default(now()) uploadedPhotos Photo[] @relation("PhotoUploader") guesses Guess[] @@index([points]) } model Photo { id String @id @default(cuid()) uploaderId String uploader User @relation("PhotoUploader", fields: [uploaderId], references: [id]) url String fileHash String? // SHA256 hash of file content (null for URL uploads) answerName String points Int @default(1) penaltyEnabled Boolean @default(false) penaltyPoints Int @default(0) maxAttempts Int? // Maximum number of guesses allowed per user (null = unlimited) createdAt DateTime @default(now()) guesses Guess[] @@index([uploaderId]) @@index([createdAt]) @@index([url]) @@index([fileHash]) } model Guess { id String @id @default(cuid()) userId String user User @relation(fields: [userId], references: [id]) photoId String photo Photo @relation(fields: [photoId], references: [id]) guessText String correct Boolean @default(false) createdAt DateTime @default(now()) @@index([userId]) @@index([photoId]) } enum Role { ADMIN USER }