diff --git a/database/migrations/20260207_add_deleted_status_to_conversations.sql b/database/migrations/20260207_add_deleted_status_to_conversations.sql new file mode 100644 index 0000000..3f32fa0 --- /dev/null +++ b/database/migrations/20260207_add_deleted_status_to_conversations.sql @@ -0,0 +1,10 @@ +-- Migration: Add 'DELETED' to conversations status CHECK constraint +-- 修复:软删除功能需要 DELETED 状态,但数据库 CHECK 约束未包含该值 +-- 导致用户无法删除历史对话(QueryFailedError: conversations_status_check) + +-- 删除旧约束 +ALTER TABLE conversations DROP CONSTRAINT IF EXISTS conversations_status_check; + +-- 添加包含 DELETED 的新约束 +ALTER TABLE conversations ADD CONSTRAINT conversations_status_check + CHECK (status IN ('ACTIVE', 'ENDED', 'ARCHIVED', 'DELETED')); diff --git a/infrastructure/docker/services/postgres/init.sql b/infrastructure/docker/services/postgres/init.sql index c5c4ce1..cf7f7d8 100644 --- a/infrastructure/docker/services/postgres/init.sql +++ b/infrastructure/docker/services/postgres/init.sql @@ -62,9 +62,9 @@ CREATE TABLE conversations ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), -- 所属用户ID user_id UUID REFERENCES users(id) ON DELETE CASCADE, - -- 对话状态: ACTIVE(进行中), ENDED(已结束), ARCHIVED(已归档) + -- 对话状态: ACTIVE(进行中), ENDED(已结束), ARCHIVED(已归档), DELETED(软删除) status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE' - CHECK (status IN ('ACTIVE', 'ENDED', 'ARCHIVED')), + CHECK (status IN ('ACTIVE', 'ENDED', 'ARCHIVED', 'DELETED')), -- 对话标题(自动生成或用户设置) title VARCHAR(255), -- 对话摘要(AI生成)