// 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 = "postgresql" url = env("DATABASE_URL") } model User { id String @id @default(cuid()) email String @unique name String password String avatarUrl String? role Role @default(REVIEWER) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt memberships ProjectMember[] comments Comment[] } model Project { id String @id @default(cuid()) name String description String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt assets Asset[] members ProjectMember[] owner ProjectMember? } model ProjectMember { id String @id @default(cuid()) userId String projectId String role Role @default(REVIEWER) joinedAt DateTime @default(now()) user User @relation(fields: [userId], references: [id], onDelete: Cascade) project Project @relation(fields: [projectId], references: [id], onDelete: Cascade) @@unique([userId, projectId]) } model Asset { id String @id @default(cuid()) projectId String title String filename String filePath String thumbnail String? duration Float? mimeType String status AssetStatus @default(PENDING_REVIEW) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt project Project @relation(fields: [projectId], references: [id], onDelete: Cascade) comments Comment[] } model Comment { id String @id @default(cuid()) assetId String userId String content String timestamp Float? annotations Json? resolved Boolean @default(false) resolveStatus ResolveStatus @default(UNRESOLVED) resolvedById String? resolvedByAt DateTime? requestedById String? requestedByAt DateTime? parentId String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt asset Asset @relation(fields: [assetId], references: [id], onDelete: Cascade) user User @relation(fields: [userId], references: [id], onDelete: Cascade) parent Comment? @relation("Replies", fields: [parentId], references: [id], onDelete: Cascade) replies Comment[] @relation("Replies") resolvedBy User? @relation("ResolvedBy", fields: [resolvedById], references: [id]) requestedBy User? @relation("RequestedBy", fields: [requestedById], references: [id]) } enum ResolveStatus { UNRESOLVED PENDING_APPROVAL RESOLVED } enum Role { ADMIN EDITOR REVIEWER VIEWER } enum AssetStatus { PENDING_REVIEW CHANGES_REQUESTED APPROVED REJECTED }