feat: chat integration, tenant admin spec, backend chat service, miniprogram updates, DEMO moved to tmp, XCX-TEST removed, migrations & docs
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
-- =============================================================================
|
||||
-- 迁移:扩展 biz.ai_conversations 和 biz.ai_messages 支持 CHAT 模块
|
||||
-- 日期:2026-03-20
|
||||
-- 关联 SPEC:rns1-chat-integration(RNS1.4 CHAT 对齐与联调收尾)
|
||||
-- 需求:R2.3, R3.8, R3.10, R4.3, R7.5
|
||||
-- 说明:
|
||||
-- 1. ai_conversations 新增 context_type/context_id(多入口对话复用)、
|
||||
-- title/last_message/last_message_at(历史列表展示与排序)
|
||||
-- 2. ai_messages 新增 reference_card(引用卡片 JSON)
|
||||
-- 3. 两个索引:上下文对话查找 + 历史列表排序
|
||||
-- =============================================================================
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 1. 扩展 ai_conversations:新增 5 个字段
|
||||
-- ---------------------------------------------------------------------------
|
||||
ALTER TABLE biz.ai_conversations
|
||||
ADD COLUMN IF NOT EXISTS context_type varchar(20),
|
||||
ADD COLUMN IF NOT EXISTS context_id varchar(50),
|
||||
ADD COLUMN IF NOT EXISTS title varchar(200),
|
||||
ADD COLUMN IF NOT EXISTS last_message text,
|
||||
ADD COLUMN IF NOT EXISTS last_message_at timestamptz;
|
||||
|
||||
COMMENT ON COLUMN biz.ai_conversations.context_type
|
||||
IS '对话关联上下文类型:task(任务)/ customer(客户)/ coach(助教)/ general(通用)';
|
||||
COMMENT ON COLUMN biz.ai_conversations.context_id
|
||||
IS '关联上下文 ID:task 入口为 taskId,customer 入口为 customerId,coach 入口为 coachId,general 为 NULL';
|
||||
COMMENT ON COLUMN biz.ai_conversations.title
|
||||
IS '对话标题:自定义 > 上下文名称 > 首条消息前20字';
|
||||
COMMENT ON COLUMN biz.ai_conversations.last_message
|
||||
IS '最后一条消息内容摘要(截断至100字)';
|
||||
COMMENT ON COLUMN biz.ai_conversations.last_message_at
|
||||
IS '最后消息时间,用于历史列表排序和对话复用时限判断';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 2. 扩展 ai_messages:新增 reference_card 字段
|
||||
-- ---------------------------------------------------------------------------
|
||||
ALTER TABLE biz.ai_messages
|
||||
ADD COLUMN IF NOT EXISTS reference_card jsonb;
|
||||
|
||||
COMMENT ON COLUMN biz.ai_messages.reference_card
|
||||
IS 'referenceCard JSON:{type, title, summary, data}';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 3. 索引:上下文对话查找(按 context_type + context_id 查找可复用对话)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE INDEX IF NOT EXISTS idx_ai_conv_context
|
||||
ON biz.ai_conversations (user_id, site_id, context_type, context_id, last_message_at DESC NULLS LAST)
|
||||
WHERE context_type IS NOT NULL;
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 4. 索引:历史列表排序优化(CHAT-1: 按 last_message_at 倒序)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE INDEX IF NOT EXISTS idx_ai_conv_last_msg
|
||||
ON biz.ai_conversations (user_id, site_id, last_message_at DESC NULLS LAST);
|
||||
|
||||
-- =============================================================================
|
||||
-- 回滚
|
||||
-- =============================================================================
|
||||
-- DROP INDEX IF EXISTS biz.idx_ai_conv_context;
|
||||
-- DROP INDEX IF EXISTS biz.idx_ai_conv_last_msg;
|
||||
-- ALTER TABLE biz.ai_messages DROP COLUMN IF EXISTS reference_card;
|
||||
-- ALTER TABLE biz.ai_conversations DROP COLUMN IF EXISTS last_message_at;
|
||||
-- ALTER TABLE biz.ai_conversations DROP COLUMN IF EXISTS last_message;
|
||||
-- ALTER TABLE biz.ai_conversations DROP COLUMN IF EXISTS title;
|
||||
-- ALTER TABLE biz.ai_conversations DROP COLUMN IF EXISTS context_id;
|
||||
-- ALTER TABLE biz.ai_conversations DROP COLUMN IF EXISTS context_type;
|
||||
|
||||
-- =============================================================================
|
||||
-- 验证
|
||||
-- =============================================================================
|
||||
-- 1) ai_conversations 新字段存在性
|
||||
-- SELECT column_name, data_type, character_maximum_length
|
||||
-- FROM information_schema.columns
|
||||
-- WHERE table_schema = 'biz' AND table_name = 'ai_conversations'
|
||||
-- AND column_name IN ('context_type','context_id','title','last_message','last_message_at');
|
||||
-- 预期:5 行
|
||||
|
||||
-- 2) ai_messages 新字段存在性
|
||||
-- SELECT column_name, data_type
|
||||
-- FROM information_schema.columns
|
||||
-- WHERE table_schema = 'biz' AND table_name = 'ai_messages'
|
||||
-- AND column_name = 'reference_card';
|
||||
-- 预期:1 行,jsonb
|
||||
|
||||
-- 3) 索引存在性
|
||||
-- SELECT indexname FROM pg_indexes
|
||||
-- WHERE schemaname = 'biz' AND tablename = 'ai_conversations'
|
||||
-- AND indexname IN ('idx_ai_conv_context','idx_ai_conv_last_msg');
|
||||
-- 预期:2 行
|
||||
Reference in New Issue
Block a user