schema.prisma 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. annotations Json?
  64. resolved Boolean @default(false)
  65. resolveStatus ResolveStatus @default(UNRESOLVED)
  66. resolvedById String?
  67. resolvedByAt DateTime?
  68. requestedById String?
  69. requestedByAt DateTime?
  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. resolvedBy User? @relation("ResolvedBy", fields: [resolvedById], references: [id])
  78. requestedBy User? @relation("RequestedBy", fields: [requestedById], references: [id])
  79. }
  80. enum ResolveStatus {
  81. UNRESOLVED
  82. PENDING_APPROVAL
  83. RESOLVED
  84. }
  85. enum Role {
  86. ADMIN
  87. EDITOR
  88. REVIEWER
  89. VIEWER
  90. }
  91. enum AssetStatus {
  92. PENDING_REVIEW
  93. CHANGES_REQUESTED
  94. APPROVED
  95. REJECTED
  96. }