@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/bin/{chunk-avy6q6yh.js → chunk-y6jpnqyc.js} +1 -1
- package/bin/shumai-transcode-app.js +235 -49
- package/package.json +7 -7
- package/prisma/migrations/20260819091331_add_kanban_schema/migration.sql +164 -0
- package/prisma/migrations/20260821102514_add_kanban_notifications/migration.sql +26 -0
- package/prisma/migrations/20260821133500_add_c_collation_to_kanban_sort_index/migration.sql +10 -0
- package/prisma/migrations/20260822020609_add_kanban_task_assets/migration.sql +17 -0
- package/prisma/migrations/20260822071734_remove_kanban_task_cancelled_status/migration.sql +28 -0
- package/prisma/schema.prisma +187 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shumai-one/shumai-transcode",
|
|
3
|
-
"version": "0.3.
|
|
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.
|
|
31
|
-
"@shumai-one/shumai-transcode-darwin-x64": "0.3.
|
|
32
|
-
"@shumai-one/shumai-transcode-linux-arm64": "0.3.
|
|
33
|
-
"@shumai-one/shumai-transcode-linux-x64": "0.3.
|
|
34
|
-
"@shumai-one/shumai-transcode-win32-arm64": "0.3.
|
|
35
|
-
"@shumai-one/shumai-transcode-win32-x64": "0.3.
|
|
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;
|
package/prisma/schema.prisma
CHANGED
|
@@ -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
|
|