-- =========================================== -- 用户档案迁移脚本 -- 添加用户移民档案和联系方式表 -- =========================================== -- =========================================== -- 用户档案表 (user_profiles) -- 存储用户移民相关的详细信息 -- =========================================== CREATE TABLE IF NOT EXISTS user_profiles ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), tenant_id UUID NOT NULL, user_id UUID NOT NULL UNIQUE, -- 基本信息 full_name VARCHAR(100), birth_date DATE, nationality VARCHAR(2), -- ISO 3166-1 alpha-2 current_country VARCHAR(2), current_city VARCHAR(100), marital_status VARCHAR(20), -- SINGLE, MARRIED, DIVORCED, WIDOWED -- 移民意向 target_countries TEXT[] DEFAULT '{}', immigration_types TEXT[] DEFAULT '{}', -- SKILLED, INVESTMENT, BUSINESS, STUDY, FAMILY, etc. planned_timeline VARCHAR(20), -- WITHIN_6M, WITHIN_1Y, 1_2Y, 2_3Y, NO_PLAN primary_purpose TEXT, -- 教育背景 highest_education VARCHAR(20), -- HIGH_SCHOOL, ASSOCIATE, BACHELOR, MASTER, DOCTORATE education_records JSONB DEFAULT '[]', -- 工作经历 current_occupation VARCHAR(100), total_work_years INT, work_records JSONB DEFAULT '[]', -- 语言能力 language_scores JSONB DEFAULT '[]', -- 家庭信息 family_members JSONB DEFAULT '[]', -- 资产信息 net_worth_range VARCHAR(20), -- UNDER_500K, 500K_1M, 1M_5M, 5M_10M, OVER_10M has_business_experience BOOLEAN DEFAULT FALSE, business_years INT, -- 其他 has_overseas_experience BOOLEAN DEFAULT FALSE, has_criminal_record BOOLEAN, has_health_issues BOOLEAN, additional_notes TEXT, -- 完成度 completion_percentage INT DEFAULT 0 CHECK (completion_percentage >= 0 AND completion_percentage <= 100), -- 时间戳 created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); COMMENT ON TABLE user_profiles IS '用户档案表 - 存储用户移民相关的详细信息'; COMMENT ON COLUMN user_profiles.nationality IS '国籍,ISO 3166-1 alpha-2 代码'; COMMENT ON COLUMN user_profiles.target_countries IS '目标移民国家列表,ISO 3166-1 alpha-2 代码'; COMMENT ON COLUMN user_profiles.immigration_types IS '感兴趣的移民类型列表'; COMMENT ON COLUMN user_profiles.education_records IS '教育经历JSON数组,包含学历、专业、院校、毕业年份等'; COMMENT ON COLUMN user_profiles.work_records IS '工作经历JSON数组,包含职位、公司、行业、时间等'; COMMENT ON COLUMN user_profiles.language_scores IS '语言成绩JSON数组,包含雅思、托福、TEF等'; COMMENT ON COLUMN user_profiles.family_members IS '家庭成员JSON数组,包含配偶、子女等信息'; COMMENT ON COLUMN user_profiles.completion_percentage IS '档案完成度百分比'; -- 索引 CREATE INDEX idx_user_profiles_tenant ON user_profiles(tenant_id); CREATE INDEX idx_user_profiles_user ON user_profiles(user_id); CREATE INDEX idx_user_profiles_nationality ON user_profiles(tenant_id, nationality); CREATE INDEX idx_user_profiles_target_countries ON user_profiles USING GIN(target_countries); CREATE INDEX idx_user_profiles_immigration_types ON user_profiles USING GIN(immigration_types); CREATE INDEX idx_user_profiles_completion ON user_profiles(tenant_id, completion_percentage DESC); -- 更新时间触发器 CREATE TRIGGER update_user_profiles_updated_at BEFORE UPDATE ON user_profiles FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- =========================================== -- 用户联系方式表 (user_contacts) -- 存储用户绑定的联系方式,支持通知推送 -- =========================================== CREATE TABLE IF NOT EXISTS user_contacts ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), tenant_id UUID NOT NULL, user_id UUID NOT NULL, -- 联系方式类型: EMAIL, WECHAT, WHATSAPP, TELEGRAM, LINE type VARCHAR(20) NOT NULL, -- 联系方式值(邮箱地址、openid、手机号等) value VARCHAR(255) NOT NULL, -- 显示名称(如微信昵称) display_name VARCHAR(100), -- 验证状态 is_verified BOOLEAN DEFAULT FALSE, verified_at TIMESTAMP WITH TIME ZONE, -- 通知设置 (付费功能) notification_enabled BOOLEAN DEFAULT FALSE, enabled_notification_types TEXT[] DEFAULT '{}', -- POLICY_UPDATE, DEADLINE_REMINDER, APPOINTMENT, CASE_UPDATE, PROMOTION -- 验证相关 verification_code VARCHAR(10), verification_expires_at TIMESTAMP WITH TIME ZONE, -- 时间戳 created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), -- 同一用户同一类型只能有一个联系方式 UNIQUE(tenant_id, user_id, type) ); COMMENT ON TABLE user_contacts IS '用户联系方式表 - 存储用户绑定的联系方式,支持通知推送'; COMMENT ON COLUMN user_contacts.type IS '联系方式类型: EMAIL邮箱, WECHAT微信, WHATSAPP, TELEGRAM, LINE'; COMMENT ON COLUMN user_contacts.notification_enabled IS '是否启用通知推送(付费功能)'; COMMENT ON COLUMN user_contacts.enabled_notification_types IS '启用的通知类型列表'; -- 索引 CREATE INDEX idx_user_contacts_tenant ON user_contacts(tenant_id); CREATE INDEX idx_user_contacts_user ON user_contacts(tenant_id, user_id); CREATE INDEX idx_user_contacts_type ON user_contacts(tenant_id, user_id, type); CREATE INDEX idx_user_contacts_verified ON user_contacts(tenant_id, is_verified); CREATE INDEX idx_user_contacts_notification ON user_contacts(tenant_id, notification_enabled) WHERE notification_enabled = TRUE; -- 更新时间触发器 CREATE TRIGGER update_user_contacts_updated_at BEFORE UPDATE ON user_contacts FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- =========================================== -- 更新 init-db.sql 需要的默认数据(如果需要) -- =========================================== -- 暂无默认数据需要插入