schema.prisma 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. }
  22. model Project {
  23. id String @id @default(cuid())
  24. name String
  25. description String?
  26. createdAt DateTime @default(now())
  27. updatedAt DateTime @updatedAt
  28. assets Asset[]
  29. members ProjectMember[]
  30. owner ProjectMember?
  31. }
  32. model ProjectMember {
  33. id String @id @default(cuid())
  34. userId String
  35. projectId String
  36. role Role @default(REVIEWER)
  37. joinedAt DateTime @default(now())
  38. user User @relation(fields: [userId], references: [id], onDelete: Cascade)
  39. project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
  40. @@unique([userId, projectId])
  41. }
  42. model Asset {
  43. id String @id @default(cuid())
  44. projectId String
  45. title String
  46. filename String
  47. filePath String
  48. thumbnail String?
  49. duration Float?
  50. mimeType String
  51. status AssetStatus @default(PENDING_REVIEW)
  52. createdAt DateTime @default(now())
  53. updatedAt DateTime @updatedAt
  54. project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
  55. comments Comment[]
  56. }
  57. model Comment {
  58. id String @id @default(cuid())
  59. assetId String
  60. userId String
  61. content String
  62. timestamp Float?
  63. annotation Json?
  64. resolved Boolean @default(false)
  65. parentId String?
  66. createdAt DateTime @default(now())
  67. updatedAt DateTime @updatedAt
  68. asset Asset @relation(fields: [assetId], references: [id], onDelete: Cascade)
  69. user User @relation(fields: [userId], references: [id], onDelete: Cascade)
  70. parent Comment? @relation("Replies", fields: [parentId], references: [id], onDelete: Cascade)
  71. replies Comment[] @relation("Replies")
  72. }
  73. enum Role {
  74. ADMIN
  75. EDITOR
  76. REVIEWER
  77. VIEWER
  78. }
  79. enum AssetStatus {
  80. PENDING_REVIEW
  81. CHANGES_REQUESTED
  82. APPROVED
  83. REJECTED
  84. }