schema.prisma 2.6 KB

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