@shumai-one/shumai-transcode 0.3.9 → 0.3.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shumai-one/shumai-transcode",
3
- "version": "0.3.9",
3
+ "version": "0.3.10",
4
4
  "description": "Media transcoding worker for the shumai media workspace",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,12 +27,12 @@
27
27
  "zod": "4.4.3"
28
28
  },
29
29
  "optionalDependencies": {
30
- "@shumai-one/shumai-transcode-darwin-arm64": "0.3.9",
31
- "@shumai-one/shumai-transcode-darwin-x64": "0.3.9",
32
- "@shumai-one/shumai-transcode-linux-arm64": "0.3.9",
33
- "@shumai-one/shumai-transcode-linux-x64": "0.3.9",
34
- "@shumai-one/shumai-transcode-win32-arm64": "0.3.9",
35
- "@shumai-one/shumai-transcode-win32-x64": "0.3.9"
30
+ "@shumai-one/shumai-transcode-darwin-arm64": "0.3.10",
31
+ "@shumai-one/shumai-transcode-darwin-x64": "0.3.10",
32
+ "@shumai-one/shumai-transcode-linux-arm64": "0.3.10",
33
+ "@shumai-one/shumai-transcode-linux-x64": "0.3.10",
34
+ "@shumai-one/shumai-transcode-win32-arm64": "0.3.10",
35
+ "@shumai-one/shumai-transcode-win32-x64": "0.3.10"
36
36
  },
37
37
  "repository": {
38
38
  "type": "git",
@@ -0,0 +1,164 @@
1
+ -- CreateEnum
2
+ CREATE TYPE "KanbanTaskStatus" AS ENUM ('TODO', 'READY', 'IN_PROGRESS', 'BLOCKED', 'IN_REVIEW', 'DONE', 'CANCELLED');
3
+
4
+ -- CreateEnum
5
+ CREATE TYPE "KanbanTaskPriority" AS ENUM ('LOW', 'MEDIUM', 'HIGH', 'URGENT');
6
+
7
+ -- CreateEnum
8
+ CREATE TYPE "KanbanTaskEventType" AS ENUM ('CREATED', 'STATUS_CHANGED', 'ASSIGNED', 'UNASSIGNED', 'COMMENTED', 'CHANGES_REQUESTED', 'BLOCKED', 'UNBLOCKED', 'PRIORITY_CHANGED', 'GOAL_CHANGED', 'DEPENDENCY_ADDED', 'DEPENDENCY_REMOVED', 'CANCELLED');
9
+
10
+ -- CreateTable
11
+ CREATE TABLE "kanban_goals" (
12
+ "id" TEXT NOT NULL,
13
+ "title" TEXT NOT NULL,
14
+ "description" TEXT,
15
+ "team_id" TEXT NOT NULL,
16
+ "creator_id" TEXT,
17
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
18
+ "updated_at" TIMESTAMP(3) NOT NULL,
19
+
20
+ CONSTRAINT "kanban_goals_pkey" PRIMARY KEY ("id")
21
+ );
22
+
23
+ -- CreateTable
24
+ CREATE TABLE "kanban_tasks" (
25
+ "id" TEXT NOT NULL,
26
+ "title" TEXT NOT NULL,
27
+ "description" TEXT,
28
+ "is_agent_task" BOOLEAN NOT NULL DEFAULT false,
29
+ "status" "KanbanTaskStatus" NOT NULL DEFAULT 'TODO',
30
+ "priority" "KanbanTaskPriority" NOT NULL DEFAULT 'MEDIUM',
31
+ "start_date" TIMESTAMP(3),
32
+ "due_date" TIMESTAMP(3),
33
+ "started_at" TIMESTAMP(3),
34
+ "completed_at" TIMESTAMP(3),
35
+ "goal_id" TEXT,
36
+ "team_id" TEXT NOT NULL,
37
+ "project_id" TEXT,
38
+ "creator_id" TEXT NOT NULL,
39
+ "reporter_id" TEXT,
40
+ "assignee_id" TEXT,
41
+ "target_folder_id" TEXT,
42
+ "sort_index" TEXT,
43
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
44
+ "updated_at" TIMESTAMP(3) NOT NULL,
45
+
46
+ CONSTRAINT "kanban_tasks_pkey" PRIMARY KEY ("id")
47
+ );
48
+
49
+ -- CreateTable
50
+ CREATE TABLE "kanban_task_links" (
51
+ "parent_id" TEXT NOT NULL,
52
+ "child_id" TEXT NOT NULL,
53
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
54
+
55
+ CONSTRAINT "kanban_task_links_pkey" PRIMARY KEY ("parent_id","child_id")
56
+ );
57
+
58
+ -- CreateTable
59
+ CREATE TABLE "kanban_task_comments" (
60
+ "id" TEXT NOT NULL,
61
+ "task_id" TEXT NOT NULL,
62
+ "author_id" TEXT NOT NULL,
63
+ "body" TEXT NOT NULL,
64
+ "attachments" JSONB,
65
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
66
+ "updated_at" TIMESTAMP(3) NOT NULL,
67
+
68
+ CONSTRAINT "kanban_task_comments_pkey" PRIMARY KEY ("id")
69
+ );
70
+
71
+ -- CreateTable
72
+ CREATE TABLE "kanban_task_events" (
73
+ "id" TEXT NOT NULL,
74
+ "task_id" TEXT NOT NULL,
75
+ "actor_id" TEXT,
76
+ "type" "KanbanTaskEventType" NOT NULL,
77
+ "from_status" "KanbanTaskStatus",
78
+ "to_status" "KanbanTaskStatus",
79
+ "data" JSONB,
80
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
81
+
82
+ CONSTRAINT "kanban_task_events_pkey" PRIMARY KEY ("id")
83
+ );
84
+
85
+ -- CreateIndex
86
+ CREATE INDEX "kanban_goals_team_id_idx" ON "kanban_goals"("team_id");
87
+
88
+ -- CreateIndex
89
+ CREATE INDEX "kanban_tasks_team_id_status_idx" ON "kanban_tasks"("team_id", "status");
90
+
91
+ -- CreateIndex
92
+ CREATE INDEX "kanban_tasks_team_id_status_sort_index_idx" ON "kanban_tasks"("team_id", "status", "sort_index");
93
+
94
+ -- CreateIndex
95
+ CREATE INDEX "kanban_tasks_team_id_is_agent_task_status_idx" ON "kanban_tasks"("team_id", "is_agent_task", "status");
96
+
97
+ -- CreateIndex
98
+ CREATE INDEX "kanban_tasks_team_id_goal_id_status_idx" ON "kanban_tasks"("team_id", "goal_id", "status");
99
+
100
+ -- CreateIndex
101
+ CREATE INDEX "kanban_tasks_team_id_assignee_id_status_idx" ON "kanban_tasks"("team_id", "assignee_id", "status");
102
+
103
+ -- CreateIndex
104
+ CREATE INDEX "kanban_tasks_project_id_status_idx" ON "kanban_tasks"("project_id", "status");
105
+
106
+ -- CreateIndex
107
+ CREATE INDEX "kanban_tasks_sort_index_idx" ON "kanban_tasks"("sort_index");
108
+
109
+ -- CreateIndex
110
+ CREATE INDEX "kanban_task_links_child_id_idx" ON "kanban_task_links"("child_id");
111
+
112
+ -- CreateIndex
113
+ CREATE INDEX "kanban_task_comments_task_id_created_at_idx" ON "kanban_task_comments"("task_id", "created_at");
114
+
115
+ -- CreateIndex
116
+ CREATE INDEX "kanban_task_events_task_id_created_at_idx" ON "kanban_task_events"("task_id", "created_at");
117
+
118
+ -- CreateIndex
119
+ CREATE INDEX "kanban_task_events_actor_id_created_at_idx" ON "kanban_task_events"("actor_id", "created_at");
120
+
121
+ -- AddForeignKey
122
+ ALTER TABLE "kanban_goals" ADD CONSTRAINT "kanban_goals_team_id_fkey" FOREIGN KEY ("team_id") REFERENCES "teams"("id") ON DELETE CASCADE ON UPDATE CASCADE;
123
+
124
+ -- AddForeignKey
125
+ ALTER TABLE "kanban_goals" ADD CONSTRAINT "kanban_goals_creator_id_fkey" FOREIGN KEY ("creator_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
126
+
127
+ -- AddForeignKey
128
+ ALTER TABLE "kanban_tasks" ADD CONSTRAINT "kanban_tasks_goal_id_fkey" FOREIGN KEY ("goal_id") REFERENCES "kanban_goals"("id") ON DELETE SET NULL ON UPDATE CASCADE;
129
+
130
+ -- AddForeignKey
131
+ ALTER TABLE "kanban_tasks" ADD CONSTRAINT "kanban_tasks_team_id_fkey" FOREIGN KEY ("team_id") REFERENCES "teams"("id") ON DELETE CASCADE ON UPDATE CASCADE;
132
+
133
+ -- AddForeignKey
134
+ ALTER TABLE "kanban_tasks" ADD CONSTRAINT "kanban_tasks_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
135
+
136
+ -- AddForeignKey
137
+ ALTER TABLE "kanban_tasks" ADD CONSTRAINT "kanban_tasks_creator_id_fkey" FOREIGN KEY ("creator_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
138
+
139
+ -- AddForeignKey
140
+ ALTER TABLE "kanban_tasks" ADD CONSTRAINT "kanban_tasks_reporter_id_fkey" FOREIGN KEY ("reporter_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
141
+
142
+ -- AddForeignKey
143
+ ALTER TABLE "kanban_tasks" ADD CONSTRAINT "kanban_tasks_assignee_id_fkey" FOREIGN KEY ("assignee_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
144
+
145
+ -- AddForeignKey
146
+ ALTER TABLE "kanban_tasks" ADD CONSTRAINT "kanban_tasks_target_folder_id_fkey" FOREIGN KEY ("target_folder_id") REFERENCES "assets"("id") ON DELETE SET NULL ON UPDATE CASCADE;
147
+
148
+ -- AddForeignKey
149
+ ALTER TABLE "kanban_task_links" ADD CONSTRAINT "kanban_task_links_parent_id_fkey" FOREIGN KEY ("parent_id") REFERENCES "kanban_tasks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
150
+
151
+ -- AddForeignKey
152
+ ALTER TABLE "kanban_task_links" ADD CONSTRAINT "kanban_task_links_child_id_fkey" FOREIGN KEY ("child_id") REFERENCES "kanban_tasks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
153
+
154
+ -- AddForeignKey
155
+ ALTER TABLE "kanban_task_comments" ADD CONSTRAINT "kanban_task_comments_task_id_fkey" FOREIGN KEY ("task_id") REFERENCES "kanban_tasks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
156
+
157
+ -- AddForeignKey
158
+ ALTER TABLE "kanban_task_comments" ADD CONSTRAINT "kanban_task_comments_author_id_fkey" FOREIGN KEY ("author_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
159
+
160
+ -- AddForeignKey
161
+ ALTER TABLE "kanban_task_events" ADD CONSTRAINT "kanban_task_events_task_id_fkey" FOREIGN KEY ("task_id") REFERENCES "kanban_tasks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
162
+
163
+ -- AddForeignKey
164
+ ALTER TABLE "kanban_task_events" ADD CONSTRAINT "kanban_task_events_actor_id_fkey" FOREIGN KEY ("actor_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
@@ -0,0 +1,26 @@
1
+ -- AlterEnum
2
+ -- This migration adds more than one value to an enum.
3
+ -- With PostgreSQL versions 11 and earlier, this is not possible
4
+ -- in a single migration. This can be worked around by creating
5
+ -- multiple migrations, each migration adding only one value to
6
+ -- the enum.
7
+
8
+
9
+ ALTER TYPE "NotificationType" ADD VALUE 'kanban_task_created';
10
+ ALTER TYPE "NotificationType" ADD VALUE 'kanban_task_assigned';
11
+ ALTER TYPE "NotificationType" ADD VALUE 'kanban_task_status_updated';
12
+ ALTER TYPE "NotificationType" ADD VALUE 'kanban_task_updated';
13
+ ALTER TYPE "NotificationType" ADD VALUE 'kanban_task_deleted';
14
+ ALTER TYPE "NotificationType" ADD VALUE 'kanban_task_comment_created';
15
+
16
+ -- AlterEnum
17
+ ALTER TYPE "WorkflowTaskType" ADD VALUE 'kanban_agent_run';
18
+
19
+ -- AlterTable
20
+ ALTER TABLE "notifications" ADD COLUMN "kanban_task_id" TEXT;
21
+
22
+ -- CreateIndex
23
+ CREATE INDEX "notifications_kanban_task_id_idx" ON "notifications"("kanban_task_id");
24
+
25
+ -- AddForeignKey
26
+ ALTER TABLE "notifications" ADD CONSTRAINT "notifications_kanban_task_id_fkey" FOREIGN KEY ("kanban_task_id") REFERENCES "kanban_tasks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,10 @@
1
+ -- AlterTable: Change sort_index column collation to "C" on kanban_tasks
2
+ ALTER TABLE "kanban_tasks" ALTER COLUMN "sort_index" TYPE TEXT COLLATE "C";
3
+
4
+ -- Recreate index on sort_index with "C" collation
5
+ DROP INDEX IF EXISTS "kanban_tasks_sort_index_idx";
6
+ CREATE INDEX "kanban_tasks_sort_index_idx" ON "kanban_tasks" ("sort_index" COLLATE "C");
7
+
8
+ -- Recreate compound index with "C" collation
9
+ DROP INDEX IF EXISTS "kanban_tasks_team_id_status_sort_index_idx";
10
+ CREATE INDEX "kanban_tasks_team_id_status_sort_index_idx" ON "kanban_tasks" ("team_id", "status", "sort_index" COLLATE "C");
@@ -0,0 +1,17 @@
1
+ -- CreateTable
2
+ CREATE TABLE "kanban_task_assets" (
3
+ "task_id" TEXT NOT NULL,
4
+ "asset_id" TEXT NOT NULL,
5
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
6
+
7
+ CONSTRAINT "kanban_task_assets_pkey" PRIMARY KEY ("task_id","asset_id")
8
+ );
9
+
10
+ -- CreateIndex
11
+ CREATE INDEX "kanban_task_assets_asset_id_idx" ON "kanban_task_assets"("asset_id");
12
+
13
+ -- AddForeignKey
14
+ ALTER TABLE "kanban_task_assets" ADD CONSTRAINT "kanban_task_assets_task_id_fkey" FOREIGN KEY ("task_id") REFERENCES "kanban_tasks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
15
+
16
+ -- AddForeignKey
17
+ ALTER TABLE "kanban_task_assets" ADD CONSTRAINT "kanban_task_assets_asset_id_fkey" FOREIGN KEY ("asset_id") REFERENCES "assets"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,28 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - The values [CANCELLED] on the enum `KanbanTaskEventType` will be removed. If these variants are still used in the database, this will fail.
5
+ - The values [CANCELLED] on the enum `KanbanTaskStatus` will be removed. If these variants are still used in the database, this will fail.
6
+
7
+ */
8
+ -- AlterEnum
9
+ BEGIN;
10
+ CREATE TYPE "KanbanTaskEventType_new" AS ENUM ('CREATED', 'STATUS_CHANGED', 'ASSIGNED', 'UNASSIGNED', 'COMMENTED', 'CHANGES_REQUESTED', 'BLOCKED', 'UNBLOCKED', 'PRIORITY_CHANGED', 'GOAL_CHANGED', 'DEPENDENCY_ADDED', 'DEPENDENCY_REMOVED');
11
+ ALTER TABLE "kanban_task_events" ALTER COLUMN "type" TYPE "KanbanTaskEventType_new" USING ("type"::text::"KanbanTaskEventType_new");
12
+ ALTER TYPE "KanbanTaskEventType" RENAME TO "KanbanTaskEventType_old";
13
+ ALTER TYPE "KanbanTaskEventType_new" RENAME TO "KanbanTaskEventType";
14
+ DROP TYPE "public"."KanbanTaskEventType_old";
15
+ COMMIT;
16
+
17
+ -- AlterEnum
18
+ BEGIN;
19
+ CREATE TYPE "KanbanTaskStatus_new" AS ENUM ('TODO', 'READY', 'IN_PROGRESS', 'BLOCKED', 'IN_REVIEW', 'DONE');
20
+ ALTER TABLE "public"."kanban_tasks" ALTER COLUMN "status" DROP DEFAULT;
21
+ ALTER TABLE "kanban_tasks" ALTER COLUMN "status" TYPE "KanbanTaskStatus_new" USING ("status"::text::"KanbanTaskStatus_new");
22
+ ALTER TABLE "kanban_task_events" ALTER COLUMN "from_status" TYPE "KanbanTaskStatus_new" USING ("from_status"::text::"KanbanTaskStatus_new");
23
+ ALTER TABLE "kanban_task_events" ALTER COLUMN "to_status" TYPE "KanbanTaskStatus_new" USING ("to_status"::text::"KanbanTaskStatus_new");
24
+ ALTER TYPE "KanbanTaskStatus" RENAME TO "KanbanTaskStatus_old";
25
+ ALTER TYPE "KanbanTaskStatus_new" RENAME TO "KanbanTaskStatus";
26
+ DROP TYPE "public"."KanbanTaskStatus_old";
27
+ ALTER TABLE "kanban_tasks" ALTER COLUMN "status" SET DEFAULT 'TODO';
28
+ COMMIT;
@@ -68,6 +68,12 @@ enum NotificationType {
68
68
  metadata_field_updated_status
69
69
  new_user_join_team
70
70
  new_user_join_project
71
+ kanban_task_created
72
+ kanban_task_assigned
73
+ kanban_task_status_updated
74
+ kanban_task_updated
75
+ kanban_task_deleted
76
+ kanban_task_comment_created
71
77
  }
72
78
 
73
79
  enum ProjectMemberRole {
@@ -112,6 +118,7 @@ enum WorkflowTaskType {
112
118
  ai_embedding
113
119
  query_embedding_for_search
114
120
  agent_tool_call
121
+ kanban_agent_run
115
122
  }
116
123
 
117
124
  enum WorkflowTaskStatus {
@@ -156,6 +163,37 @@ enum QuotaResourceType {
156
163
  agent_tool_call_count
157
164
  }
158
165
 
166
+ enum KanbanTaskStatus {
167
+ TODO
168
+ READY
169
+ IN_PROGRESS
170
+ BLOCKED
171
+ IN_REVIEW
172
+ DONE
173
+ }
174
+
175
+ enum KanbanTaskPriority {
176
+ LOW
177
+ MEDIUM
178
+ HIGH
179
+ URGENT
180
+ }
181
+
182
+ enum KanbanTaskEventType {
183
+ CREATED
184
+ STATUS_CHANGED
185
+ ASSIGNED
186
+ UNASSIGNED
187
+ COMMENTED
188
+ CHANGES_REQUESTED
189
+ BLOCKED
190
+ UNBLOCKED
191
+ PRIORITY_CHANGED
192
+ GOAL_CHANGED
193
+ DEPENDENCY_ADDED
194
+ DEPENDENCY_REMOVED
195
+ }
196
+
159
197
  // ----------------------------------------------------------------------
160
198
  // Models
161
199
  // ----------------------------------------------------------------------
@@ -194,6 +232,12 @@ model User {
194
232
  aiUsages AiUsage[] @relation("UserToAiUsage")
195
233
  auditLogs AuditLog[] @relation("UserToAuditLog")
196
234
  quotaRecords QuotaRecord[] @relation("UserToQuotaRecord")
235
+ kanbanTasksCreated KanbanTask[] @relation("KanbanTaskCreator")
236
+ kanbanTasksReported KanbanTask[] @relation("KanbanTaskReporter")
237
+ kanbanTasksAssigned KanbanTask[] @relation("KanbanTaskAssignee")
238
+ kanbanGoalsCreated KanbanGoal[] @relation("UserToKanbanGoal")
239
+ kanbanTaskComments KanbanTaskComment[]
240
+ kanbanTaskEvents KanbanTaskEvent[]
197
241
 
198
242
  @@map("users")
199
243
  }
@@ -282,6 +326,8 @@ model Team {
282
326
  watermarkTemplates WatermarkTemplate[] @relation("TeamToWatermarkTemplate")
283
327
  quotaRules QuotaRule[] @relation("TeamToQuotaRule")
284
328
  quotaRecords QuotaRecord[] @relation("TeamToQuotaRecord")
329
+ kanbanGoals KanbanGoal[] @relation("TeamToKanbanGoal")
330
+ kanbanTasks KanbanTask[] @relation("TeamToKanbanTask")
285
331
 
286
332
  @@map("teams")
287
333
  }
@@ -367,6 +413,7 @@ model Project {
367
413
  shareLinks ShareLink[] @relation("ProjectToShareLink")
368
414
  collections Collection[] @relation("ProjectToCollection")
369
415
  auditLogs AuditLog[] @relation("ProjectToAuditLog")
416
+ kanbanTasks KanbanTask[] @relation("ProjectToKanbanTask")
370
417
 
371
418
  @@map("projects")
372
419
  @@index([createdAt])
@@ -515,6 +562,8 @@ model Asset {
515
562
  agentSessions AgentSession[] @relation("AssetToAgentSession")
516
563
  watermarkFiles WatermarkFile[] @relation("AssetToWatermarkFile")
517
564
  agentMd AssetAgentMd? @relation("AssetToAgentMd")
565
+ kanbanTargetTasks KanbanTask[] @relation("KanbanTaskTargetFolder")
566
+ kanbanTasks KanbanTaskAsset[]
518
567
 
519
568
  @@map("assets")
520
569
  @@index([type])
@@ -691,11 +740,15 @@ model Notification {
691
740
  taskId String? @map("task_id")
692
741
  task Task? @relation("TaskToNotification", fields: [taskId], references: [id])
693
742
 
743
+ kanbanTaskId String? @map("kanban_task_id")
744
+ kanbanTask KanbanTask? @relation("KanbanTaskToNotification", fields: [kanbanTaskId], references: [id], onDelete: Cascade)
745
+
694
746
  userId String? @map("user_id")
695
747
  user User? @relation("UserToNotification", fields: [userId], references: [id])
696
748
 
697
749
  readByMembers TeamMember? @relation("TeamMemberToLastReadNotification")
698
750
 
751
+ @@index([kanbanTaskId])
699
752
  @@map("notifications")
700
753
  }
701
754
 
@@ -1087,4 +1140,138 @@ model QuotaRecord {
1087
1140
  @@map("quota_records")
1088
1141
  }
1089
1142
 
1143
+ model KanbanGoal {
1144
+ id String @id @default(ulid())
1145
+ title String
1146
+ description String? @db.Text
1147
+ teamId String @map("team_id")
1148
+ team Team @relation("TeamToKanbanGoal", fields: [teamId], references: [id], onDelete: Cascade)
1149
+ creatorId String? @map("creator_id")
1150
+ creator User? @relation("UserToKanbanGoal", fields: [creatorId], references: [id], onDelete: SetNull)
1151
+ tasks KanbanTask[]
1152
+
1153
+ createdAt DateTime @default(now()) @map("created_at")
1154
+ updatedAt DateTime @updatedAt @map("updated_at")
1155
+
1156
+ @@index([teamId])
1157
+ @@map("kanban_goals")
1158
+ }
1159
+
1160
+ model KanbanTask {
1161
+ id String @id @default(ulid())
1162
+ title String
1163
+ description String? @db.Text
1164
+ isAgentTask Boolean @default(false) @map("is_agent_task")
1165
+ status KanbanTaskStatus @default(TODO)
1166
+ priority KanbanTaskPriority @default(MEDIUM)
1167
+
1168
+ startDate DateTime? @map("start_date")
1169
+ dueDate DateTime? @map("due_date")
1170
+ startedAt DateTime? @map("started_at")
1171
+ completedAt DateTime? @map("completed_at")
1172
+
1173
+ goalId String? @map("goal_id")
1174
+ goal KanbanGoal? @relation(fields: [goalId], references: [id], onDelete: SetNull)
1175
+
1176
+ teamId String @map("team_id")
1177
+ team Team @relation("TeamToKanbanTask", fields: [teamId], references: [id], onDelete: Cascade)
1178
+ projectId String? @map("project_id")
1179
+ project Project? @relation("ProjectToKanbanTask", fields: [projectId], references: [id], onDelete: Cascade)
1180
+
1181
+ creatorId String @map("creator_id")
1182
+ creator User @relation("KanbanTaskCreator", fields: [creatorId], references: [id])
1183
+ reporterId String? @map("reporter_id")
1184
+ reporter User? @relation("KanbanTaskReporter", fields: [reporterId], references: [id])
1185
+ assigneeId String? @map("assignee_id")
1186
+ assignee User? @relation("KanbanTaskAssignee", fields: [assigneeId], references: [id])
1187
+
1188
+ targetFolderId String? @map("target_folder_id")
1189
+ targetFolder Asset? @relation("KanbanTaskTargetFolder", fields: [targetFolderId], references: [id], onDelete: SetNull)
1190
+
1191
+ dependencies KanbanTaskLink[] @relation("ChildLinks")
1192
+ dependents KanbanTaskLink[] @relation("ParentLinks")
1193
+ assets KanbanTaskAsset[]
1194
+
1195
+ comments KanbanTaskComment[]
1196
+ events KanbanTaskEvent[]
1197
+ notifications Notification[] @relation("KanbanTaskToNotification")
1198
+
1199
+ sortIndex String? @map("sort_index")
1200
+
1201
+ createdAt DateTime @default(now()) @map("created_at")
1202
+ updatedAt DateTime @updatedAt @map("updated_at")
1203
+
1204
+ @@index([teamId, status])
1205
+ @@index([teamId, status, sortIndex])
1206
+ @@index([teamId, isAgentTask, status])
1207
+ @@index([teamId, goalId, status])
1208
+ @@index([teamId, assigneeId, status])
1209
+ @@index([projectId, status])
1210
+ @@index([sortIndex])
1211
+ @@map("kanban_tasks")
1212
+ }
1213
+
1214
+ model KanbanTaskLink {
1215
+ parentId String @map("parent_id")
1216
+ childId String @map("child_id")
1217
+ parent KanbanTask @relation("ParentLinks", fields: [parentId], references: [id], onDelete: Cascade)
1218
+ child KanbanTask @relation("ChildLinks", fields: [childId], references: [id], onDelete: Cascade)
1219
+
1220
+ createdAt DateTime @default(now()) @map("created_at")
1221
+
1222
+ @@id([parentId, childId])
1223
+ @@index([childId])
1224
+ @@map("kanban_task_links")
1225
+ }
1226
+
1227
+ model KanbanTaskAsset {
1228
+ taskId String @map("task_id")
1229
+ assetId String @map("asset_id")
1230
+ task KanbanTask @relation(fields: [taskId], references: [id], onDelete: Cascade)
1231
+ asset Asset @relation(fields: [assetId], references: [id], onDelete: Cascade)
1232
+
1233
+ createdAt DateTime @default(now()) @map("created_at")
1234
+
1235
+ @@id([taskId, assetId])
1236
+ @@index([assetId])
1237
+ @@map("kanban_task_assets")
1238
+ }
1239
+
1240
+ model KanbanTaskComment {
1241
+ id String @id @default(ulid())
1242
+ taskId String @map("task_id")
1243
+ task KanbanTask @relation(fields: [taskId], references: [id], onDelete: Cascade)
1244
+ authorId String @map("author_id")
1245
+ author User @relation(fields: [authorId], references: [id])
1246
+ body String @db.Text
1247
+ /// [KanbanCommentAttachmentList]
1248
+ attachments Json?
1249
+
1250
+ createdAt DateTime @default(now()) @map("created_at")
1251
+ updatedAt DateTime @updatedAt @map("updated_at")
1252
+
1253
+ @@index([taskId, createdAt])
1254
+ @@map("kanban_task_comments")
1255
+ }
1256
+
1257
+ model KanbanTaskEvent {
1258
+ id String @id @default(ulid())
1259
+ taskId String @map("task_id")
1260
+ task KanbanTask @relation(fields: [taskId], references: [id], onDelete: Cascade)
1261
+ actorId String? @map("actor_id")
1262
+ actor User? @relation(fields: [actorId], references: [id])
1263
+ type KanbanTaskEventType
1264
+ fromStatus KanbanTaskStatus? @map("from_status")
1265
+ toStatus KanbanTaskStatus? @map("to_status")
1266
+ /// [KanbanEventPayload]
1267
+ data Json?
1268
+
1269
+ createdAt DateTime @default(now()) @map("created_at")
1270
+
1271
+ @@index([taskId, createdAt])
1272
+ @@index([actorId, createdAt])
1273
+ @@map("kanban_task_events")
1274
+ }
1275
+
1276
+
1090
1277