**迁移文件优化**: - 001_users.up.sql: 添加完整表和列注释,说明密码哈希算法 (bcrypt) 和 token 哈希算法 (SHA-256) - 002_messages.up.sql: 收紧 role 字段至 VARCHAR(10),添加 tokens_used 非负约束,补充完整注释 - 003_sessions.up.sql: 收紧 title 字段至 VARCHAR(100) 并添加长度约束 (1-100),详细说明 config JSONB 结构 - 004_user_scenarios.up.sql: 修复 greeting 字段冲突 (VARCHAR(500)),扩大 icon 至 VARCHAR(20) 支持复合 Emoji,prompt 改为 TEXT 无上限,优化约束逻辑 **后端代码修改**: - auth.go: 移除用户名最小长度限制 (3 字符),仅保留最大长度 64 **前端国际化修改**: - 更新三种语言的登录/注册表单 placeholder 文本,移除字符长度要求提示 - zh-CN: "请输入用户名" / "请输入密码" - en-US: "Enter username" / "Enter password" - ja-JP: "ユーザー名を入力" / "パスワードを入力" **删除文件**: - 移除临时修复迁移文件 (005_fix_user_scenarios_description.*) - 删除临时诊断脚本 (fix_user_scenarios.sql, check_constraints.sql) 所有约束修改都是放宽限制,不影响现有数据。
41 lines
2.2 KiB
SQL
41 lines
2.2 KiB
SQL
-- 004_user_scenarios.up.sql
|
||
-- 用户自建情景表
|
||
|
||
CREATE TABLE user_scenarios (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||
name VARCHAR(50) NOT NULL,
|
||
icon VARCHAR(20) DEFAULT '✨',
|
||
description VARCHAR(100),
|
||
prompt TEXT NOT NULL,
|
||
greeting VARCHAR(500),
|
||
language VARCHAR(10) DEFAULT 'zh-CN',
|
||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||
|
||
CONSTRAINT unique_user_scenario UNIQUE(user_id, name),
|
||
CONSTRAINT check_name_length CHECK (char_length(name) >= 2 AND char_length(name) <= 50),
|
||
CONSTRAINT check_description_length CHECK (description IS NULL OR char_length(description) <= 100),
|
||
CONSTRAINT check_prompt_length CHECK (char_length(prompt) >= 10),
|
||
CONSTRAINT check_greeting_length CHECK (greeting IS NULL OR char_length(greeting) <= 500)
|
||
);
|
||
|
||
-- 为用户 ID 创建索引,加速查询
|
||
CREATE INDEX idx_user_scenarios_user_id ON user_scenarios(user_id);
|
||
|
||
-- 为创建时间创建索引,用于排序
|
||
CREATE INDEX idx_user_scenarios_created_at ON user_scenarios(created_at DESC);
|
||
|
||
-- 表和列注释
|
||
COMMENT ON TABLE user_scenarios IS '用户自建情景表,存储用户创建的 AI 对话情景配置';
|
||
COMMENT ON COLUMN user_scenarios.id IS '情景唯一标识符 (UUID)';
|
||
COMMENT ON COLUMN user_scenarios.user_id IS '所属用户 ID,外键关联 users 表,用户删除时级联删除';
|
||
COMMENT ON COLUMN user_scenarios.name IS '情景名称 (2-50 字符),如"创意写作导师"';
|
||
COMMENT ON COLUMN user_scenarios.icon IS 'Emoji 图标 (最多 20 字符),支持复合 Emoji,如"🎨"';
|
||
COMMENT ON COLUMN user_scenarios.description IS '简短描述 (最多 100 字符),可选,显示在情景卡片上';
|
||
COMMENT ON COLUMN user_scenarios.prompt IS '角色 System Prompt (最少 10 字符,无上限),定义 AI 行为和对话风格';
|
||
COMMENT ON COLUMN user_scenarios.greeting IS '首句引导 (最多 500 字符),可选,AI 的开场白';
|
||
COMMENT ON COLUMN user_scenarios.language IS '默认语言代码 (如 zh-CN、en-US、ja-JP)';
|
||
COMMENT ON COLUMN user_scenarios.created_at IS '情景创建时间';
|
||
COMMENT ON COLUMN user_scenarios.updated_at IS '情景最后更新时间';
|