Compare commits

...

2 Commits

Author SHA1 Message Date
Arvin Xu eff220fdd0 🧪 test(topic): add status and completed_at to create snapshots (#13976)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 21:45:58 +08:00
Arvin Xu ba9a9810fb 🗃️ feat(topic): add status and completed_at columns
Adds nullable `status` enum (active/completed/archived) and `completed_at` timestamp columns to topics, plus supporting indexes on status and (user_id, completed_at).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 21:20:40 +08:00
6 changed files with 14828 additions and 2 deletions
+7 -2
View File
@@ -516,8 +516,9 @@ table document_histories {
saved_at "timestamp with time zone" [not null]
indexes {
(document_id, saved_at) [name: 'document_histories_document_id_saved_at_idx']
(user_id, saved_at) [name: 'document_histories_user_id_saved_at_idx']
document_id [name: 'document_histories_document_id_idx']
user_id [name: 'document_histories_user_id_idx']
saved_at [name: 'document_histories_saved_at_idx']
}
}
@@ -1631,6 +1632,8 @@ table topics {
metadata jsonb
trigger text
mode text
status text
completed_at "timestamp with time zone"
accessed_at "timestamp with time zone" [not null, default: `now()`]
created_at "timestamp with time zone" [not null, default: `now()`]
updated_at "timestamp with time zone" [not null, default: `now()`]
@@ -1643,6 +1646,8 @@ table topics {
group_id [name: 'topics_group_id_idx']
agent_id [name: 'topics_agent_id_idx']
trigger [name: 'topics_trigger_idx']
status [name: 'topics_status_idx']
(user_id, completed_at) [name: 'topics_user_id_completed_at_idx']
() [name: 'topics_extract_status_gin_idx']
}
}
@@ -0,0 +1,4 @@
ALTER TABLE "topics" ADD COLUMN IF NOT EXISTS "status" text;--> statement-breakpoint
ALTER TABLE "topics" ADD COLUMN IF NOT EXISTS "completed_at" timestamp with time zone;--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "topics_status_idx" ON "topics" USING btree ("status");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "topics_user_id_completed_at_idx" ON "topics" USING btree ("user_id","completed_at");
File diff suppressed because it is too large Load Diff
@@ -693,6 +693,13 @@
"when": 1776234919716,
"tag": "0098_add_document_history",
"breakpoints": true
},
{
"idx": 99,
"version": "7",
"when": 1776604511536,
"tag": "0099_topic_add_status_and_completed_at",
"breakpoints": true
}
],
"version": "6"
@@ -61,6 +61,8 @@ describe('TopicModel - Create', () => {
editorData: null,
trigger: null,
mode: null,
status: null,
completedAt: null,
createdAt: expect.any(Date),
updatedAt: expect.any(Date),
accessedAt: expect.any(Date),
@@ -109,6 +111,8 @@ describe('TopicModel - Create', () => {
metadata: null,
trigger: null,
mode: null,
status: null,
completedAt: null,
sessionId,
userId,
createdAt: expect.any(Date),
+4
View File
@@ -42,6 +42,8 @@ export const topics = pgTable(
metadata: jsonb('metadata').$type<ChatTopicMetadata | undefined>(),
trigger: text('trigger'), // 'cron' | 'chat' | 'api' | 'eval' - topic creation trigger source
mode: text('mode'), // 'temp' | 'test' | 'default' - topic usage scenario
status: text('status', { enum: ['active', 'completed', 'archived'] }),
completedAt: timestamptz('completed_at'),
...timestamps,
},
(t) => [
@@ -52,6 +54,8 @@ export const topics = pgTable(
index('topics_group_id_idx').on(t.groupId),
index('topics_agent_id_idx').on(t.agentId),
index('topics_trigger_idx').on(t.trigger),
index('topics_status_idx').on(t.status),
index('topics_user_id_completed_at_idx').on(t.userId, t.completedAt),
index('topics_extract_status_gin_idx').using(
'gin',
sql`(metadata->'userMemoryExtractStatus') jsonb_path_ops`,