issue observers Наблюдатели задачи видят её и комментируют, но не редактируют. - таблица issue_observer, наблюдатели — часть сущности Issue - видимость: reporter, assignee или наблюдатель (задачи, история, SSE) - правка/удаление задачи и вложений — только reporter/assignee (403 наблюдателю) - observers в create/update, DELETE /issues/:id/observers/me, фильтр role - история изменений и уведомления новым наблюдателям Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
46903e9ec5
commit
b1f6b61994
54 files changed
+901
-69
No files matched your search
+27
-2
@@ -31,6 +31,7 @@ model User {
|
||||
comments Comment[]
|
||||
uploadedFiles File[] @relation(name: "fileUploader")
|
||||
issueChanges IssueChange[]
|
||||
observedIssues IssueObserver[]
|
||||
|
||||
@@unique([email])
|
||||
@@map("user")
|
||||
@@ -103,6 +104,7 @@ model Issue {
|
||||
comments Comment[]
|
||||
attachments IssueAttachment[]
|
||||
changes IssueChange[]
|
||||
observers IssueObserver[]
|
||||
createdAt DateTime @default(now()) @db.Timestamptz(3)
|
||||
updatedAt DateTime @updatedAt @db.Timestamptz(3)
|
||||
|
||||
@@ -118,6 +120,21 @@ model Issue {
|
||||
@@map("issue")
|
||||
}
|
||||
|
||||
/// Наблюдатель задачи: видит её и может комментировать, но не редактировать.
|
||||
/// Редактируют задачу только reporter и assignee.
|
||||
model IssueObserver {
|
||||
issueId Int
|
||||
userId String
|
||||
createdAt DateTime @default(now()) @db.Timestamptz(3)
|
||||
|
||||
issue Issue @relation(fields: [issueId], references: [id], onDelete: Cascade)
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@id([issueId, userId])
|
||||
@@index([userId])
|
||||
@@map("issue_observer")
|
||||
}
|
||||
|
||||
model Project {
|
||||
id String @id @default(uuid(7))
|
||||
name String
|
||||
@@ -135,11 +152,19 @@ model Project {
|
||||
@@map("project")
|
||||
}
|
||||
|
||||
/// MEMBER создаёт задачи в проекте; OBSERVER только видит проект —
|
||||
/// он наблюдает за отдельными задачами (IssueObserver).
|
||||
enum ProjectRole {
|
||||
MEMBER
|
||||
OBSERVER
|
||||
}
|
||||
|
||||
model ProjectMember {
|
||||
id String @id @default(uuid(7))
|
||||
id String @id @default(uuid(7))
|
||||
projectId String
|
||||
userId String
|
||||
createdAt DateTime @default(now()) @db.Timestamptz(3)
|
||||
role ProjectRole @default(MEMBER)
|
||||
createdAt DateTime @default(now()) @db.Timestamptz(3)
|
||||
|
||||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
Reference in new issue
Block a user