schema.prisma 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. // This is your Prisma schema file,
  2. // learn more about it in the docs: https://pris.ly/d/prisma-schema
  3. generator client {
  4. provider = "prisma-client-js"
  5. }
  6. datasource db {
  7. provider = "postgresql"
  8. url = env("DATABASE_URL")
  9. }
  10. model User {
  11. id String @id @default(cuid())
  12. email String @unique
  13. name String
  14. password String
  15. avatarUrl String?
  16. role Role @default(REVIEWER)
  17. createdAt DateTime @default(now())
  18. updatedAt DateTime @updatedAt
  19. memberships ProjectMember[]
  20. comments Comment[]
  21. projects Project[]
  22. }
  23. model Project {
  24. id String @id @default(cuid())
  25. name String
  26. description String?
  27. ownerId String
  28. createdAt DateTime @default(now())
  29. updatedAt DateTime @updatedAt
  30. assets Asset[]
  31. members ProjectMember[]
  32. owner User @relation(fields: [ownerId], references: [id])
  33. }
  34. model ProjectMember {
  35. id String @id @default(cuid())
  36. userId String
  37. projectId String
  38. role Role @default(REVIEWER)
  39. isOwner Boolean @default(false)
  40. joinedAt DateTime @default(now())
  41. user User @relation(fields: [userId], references: [id], onDelete: Cascade)
  42. project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
  43. @@unique([userId, projectId])
  44. @@index([projectId])
  45. @@index([userId])
  46. }
  47. model Asset {
  48. id String @id @default(cuid())
  49. projectId String
  50. title String
  51. filename String
  52. filePath String
  53. thumbnail String?
  54. duration Float?
  55. mimeType String
  56. status AssetStatus @default(PENDING_REVIEW)
  57. createdAt DateTime @default(now())
  58. updatedAt DateTime @updatedAt
  59. project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
  60. comments Comment[]
  61. }
  62. model Comment {
  63. id String @id @default(cuid())
  64. assetId String
  65. userId String
  66. content String
  67. timestamp Float?
  68. annotation Json?
  69. resolved Boolean @default(false)
  70. parentId String?
  71. createdAt DateTime @default(now())
  72. updatedAt DateTime @updatedAt
  73. asset Asset @relation(fields: [assetId], references: [id], onDelete: Cascade)
  74. user User @relation(fields: [userId], references: [id], onDelete: Cascade)
  75. parent Comment? @relation("Replies", fields: [parentId], references: [id], onDelete: Cascade)
  76. replies Comment[] @relation("Replies")
  77. }
  78. enum Role {
  79. ADMIN
  80. EDITOR
  81. REVIEWER
  82. VIEWER
  83. }
  84. enum AssetStatus {
  85. PENDING_REVIEW
  86. CHANGES_REQUESTED
  87. APPROVED
  88. REJECTED
  89. }