fix: rebuild latest demo database

This commit is contained in:
2026-09-10 20:28:29 +08:00
parent 76a10e5de0
commit 7994e081a6
3 changed files with 82 additions and 73 deletions
@@ -5,72 +5,73 @@ BEGIN;
SET session_replication_role = 'replica'; SET session_replication_role = 'replica';
-- 1. 组织 -- 1. 组织
INSERT INTO organizations (name, type, contact_name, status) VALUES INSERT INTO organizations (id, name, type, contact_name, status) VALUES
('丹阳市妇女联合会', 'women_federation', '张丽华', 'active'), (gen_random_uuid(), '丹阳市妇女联合会', 'women_federation', '张丽华', 'active'),
('丹阳市总工会', 'trade_union', '李明远', 'active'), (gen_random_uuid(), '丹阳市总工会', 'trade_union', '李明远', 'active'),
('丹阳市慈善基金会', 'charity_center', '王秀英', 'active'); (gen_random_uuid(), '丹阳市慈善基金会', 'charity_center', '王秀英', 'active');
-- 2. 工作人员(V1.0原有 + V1.1新增) -- 2. 工作人员(V1.0原有 + V1.1新增)
INSERT INTO operators (organization_id, name, username, password_hash, status) INSERT INTO operators (id, organization_id, name, username, password_hash, status)
SELECT id, '陈主任', 'admin', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' SELECT gen_random_uuid(), id, '陈主任', 'admin', '$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active'
FROM organizations WHERE type='women_federation' LIMIT 1 FROM organizations WHERE type='women_federation'
UNION ALL UNION ALL
SELECT id, '红娘小王', 'wanghongniang', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' SELECT gen_random_uuid(), id, '红娘小王', 'wanghongniang', '$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active'
FROM organizations WHERE type='women_federation' LIMIT 1 FROM organizations WHERE type='women_federation'
UNION ALL UNION ALL
SELECT id, '审核员小张', 'reviewer01', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' SELECT gen_random_uuid(), id, '审核员小张', 'reviewer01', '$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active'
FROM organizations WHERE type='charity_center' LIMIT 1 FROM organizations WHERE type='charity_center'
UNION ALL UNION ALL
SELECT id, '活动管理员赵', 'activitymgr','$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' SELECT gen_random_uuid(), id, '活动管理员赵', 'activitymgr','$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active'
FROM organizations WHERE type='trade_union' LIMIT 1 FROM organizations WHERE type='trade_union'
-- V1.1 新增演示操作员 -- V1.1 新增演示操作员
UNION ALL UNION ALL
SELECT id, '服务站小李', 'stationop', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' SELECT gen_random_uuid(), id, '服务站小李', 'stationop', '$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active'
FROM organizations WHERE type='women_federation' LIMIT 1 FROM organizations WHERE type='women_federation'
UNION ALL UNION ALL
SELECT id, '咨询师小周', 'counselor', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' SELECT gen_random_uuid(), id, '咨询师小周', 'counselor', '$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active'
FROM organizations WHERE type='charity_center' LIMIT 1 FROM organizations WHERE type='charity_center'
UNION ALL UNION ALL
SELECT id, '内容编辑小吴', 'contenteditor','$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' SELECT gen_random_uuid(), id, '内容编辑小吴', 'contenteditor','$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active'
FROM organizations WHERE type='women_federation' LIMIT 1; FROM organizations WHERE type='women_federation';
-- 操作员角色绑定(V1.0原有 + V1.1新增) -- 操作员角色绑定(V1.0原有 + V1.1新增)
INSERT INTO operator_roles (operator_id, role_id) INSERT INTO operator_roles (operator_id, role_id)
-- V1.0: admin = super_admin + platform_admin -- V1.0: admin = super_admin + platform_admin
SELECT o.id, '00000000-0000-0000-0000-000000000001' FROM operators WHERE username='admin' SELECT o.id, '00000000-0000-0000-0000-000000000001'::uuid FROM operators o WHERE username='admin'
UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000002' FROM operators WHERE username='admin' UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000002'::uuid FROM operators o WHERE username='admin'
-- V1.0: wanghongniang = matchmaker + activity_manager -- V1.0: wanghongniang = matchmaker + activity_manager
SELECT o.id, '00000000-0000-0000-0000-000000000005' FROM operators WHERE username='wanghongniang' UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000005'::uuid FROM operators o WHERE username='wanghongniang'
UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000006' FROM operators WHERE username='wanghongniang' UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000006'::uuid FROM operators o WHERE username='wanghongniang'
-- V1.0: reviewer01 = reviewer + risk_operator -- V1.0: reviewer01 = reviewer + risk_operator
SELECT o.id, '00000000-0000-0000-0000-000000000004' FROM operators WHERE username='reviewer01' UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000004'::uuid FROM operators o WHERE username='reviewer01'
UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000007' FROM operators WHERE username='reviewer01' UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000007'::uuid FROM operators o WHERE username='reviewer01'
-- V1.0: activitymgr = activity_manager + volunteer -- V1.0: activitymgr = activity_manager + volunteer
SELECT o.id, '00000000-0000-0000-0000-000000000006' FROM operators WHERE username='activitymgr' UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000006'::uuid FROM operators o WHERE username='activitymgr'
UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000008' FROM operators WHERE username='activitymgr' UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000008'::uuid FROM operators o WHERE username='activitymgr'
-- V1.1: stationop = service_station_operator -- V1.1: stationop = service_station_operator
SELECT o.id, '00000000-0000-0000-0000-000000000010' FROM operators WHERE username='stationop' UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000010'::uuid FROM operators o WHERE username='stationop'
-- V1.1: counselor = counselor -- V1.1: counselor = counselor
SELECT o.id, '00000000-0000-0000-0000-000000000011' FROM operators WHERE username='counselor' UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000011'::uuid FROM operators o WHERE username='counselor'
-- V1.1: contenteditor = content_editor -- V1.1: contenteditor = content_editor
SELECT o.id, '00000000-0000-0000-0000-000000000013' FROM operators WHERE username='contenteditor'; UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000013'::uuid FROM operators o WHERE username='contenteditor';
-- 3. 用户 + 资料 + 偏好 + 实名 + 兴趣 + 隐私 + 照片(一次性生成UUID并关联) -- 3. 用户 + 资料 + 偏好 + 实名 + 兴趣 + 隐私 + 照片(一次性生成UUID并关联)
CREATE TEMP TABLE user_data ON COMMIT DROP AS
WITH demo_users AS ( WITH demo_users AS (
INSERT INTO users (wechat_openid, account_status, relationship_status, recommendation_enabled, created_at) INSERT INTO users (id, wechat_openid, account_status, relationship_status, recommendation_enabled, created_at)
VALUES VALUES
('demo_openid_f01','normal','searching',true,'2026-03-15T10:00:00Z'), (gen_random_uuid(),'demo_openid_f01','normal','searching',true,'2026-03-15T10:00:00Z'),
('demo_openid_f02','normal','searching',true,'2026-03-20T14:30:00Z'), (gen_random_uuid(),'demo_openid_f02','normal','searching',true,'2026-03-20T14:30:00Z'),
('demo_openid_f03','normal','searching',true,'2026-04-01T09:15:00Z'), (gen_random_uuid(),'demo_openid_f03','normal','searching',true,'2026-04-01T09:15:00Z'),
('demo_openid_f04','normal','paused',true,'2026-04-10T16:00:00Z'), (gen_random_uuid(),'demo_openid_f04','normal','paused',true,'2026-04-10T16:00:00Z'),
('demo_openid_f05','normal','searching',true,'2026-05-01T11:20:00Z'), (gen_random_uuid(),'demo_openid_f05','normal','searching',true,'2026-05-01T11:20:00Z'),
('demo_openid_f06','normal','searching',true,'2026-05-15T08:45:00Z'), (gen_random_uuid(),'demo_openid_f06','normal','searching',true,'2026-05-15T08:45:00Z'),
('demo_openid_m01','normal','searching',true,'2026-03-10T09:00:00Z'), (gen_random_uuid(),'demo_openid_m01','normal','searching',true,'2026-03-10T09:00:00Z'),
('demo_openid_m02','normal','getting_to_know',true,'2026-03-25T13:00:00Z'), (gen_random_uuid(),'demo_openid_m02','normal','getting_to_know',true,'2026-03-25T13:00:00Z'),
('demo_openid_m03','normal','searching',true,'2026-04-05T15:30:00Z'), (gen_random_uuid(),'demo_openid_m03','normal','searching',true,'2026-04-05T15:30:00Z'),
('demo_openid_m04','normal','searching',true,'2026-04-20T10:00:00Z'), (gen_random_uuid(),'demo_openid_m04','normal','searching',true,'2026-04-20T10:00:00Z'),
('demo_openid_m05','normal','matched_successfully',true,'2026-05-01T14:00:00Z'), (gen_random_uuid(),'demo_openid_m05','normal','matched_successfully',true,'2026-05-01T14:00:00Z'),
('demo_openid_m06','normal','searching',true,'2026-05-10T16:30:00Z') (gen_random_uuid(),'demo_openid_m06','normal','searching',true,'2026-05-10T16:30:00Z')
RETURNING id, wechat_openid RETURNING id, wechat_openid
), user_map AS ( ), user_map AS (
SELECT id, wechat_openid, SELECT id, wechat_openid,
@@ -84,7 +85,7 @@ WITH demo_users AS (
END as alias END as alias
FROM demo_users FROM demo_users
), ),
user_data AS ( prepared_user_data AS (
SELECT id, wechat_openid, alias, SELECT id, wechat_openid, alias,
CASE alias WHEN 'f01' THEN '小芳' WHEN 'f02' THEN '晓燕' WHEN 'f03' THEN '婷婷' CASE alias WHEN 'f01' THEN '小芳' WHEN 'f02' THEN '晓燕' WHEN 'f03' THEN '婷婷'
WHEN 'f04' THEN '美玲' WHEN 'f05' THEN '慧琴' WHEN 'f06' THEN '秀英' WHEN 'f04' THEN '美玲' WHEN 'f05' THEN '慧琴' WHEN 'f06' THEN '秀英'
@@ -134,6 +135,8 @@ user_data AS (
END as completion END as completion
FROM user_map FROM user_map
) )
SELECT * FROM prepared_user_data;
INSERT INTO user_profiles (user_id, display_name, gender, birth_date, height_cm, INSERT INTO user_profiles (user_id, display_name, gender, birth_date, height_cm,
region_code, region_name, marital_status, children_status, region_code, region_name, marital_status, children_status,
education_code, occupation_code, smoking_status, drinking_status, education_code, occupation_code, smoking_status, drinking_status,
@@ -153,7 +156,7 @@ SELECT id,
CASE WHEN alias LIKE 'f%' THEN 155 WHEN alias LIKE 'm%' THEN 170 ELSE 158 END, CASE WHEN alias LIKE 'f%' THEN 155 WHEN alias LIKE 'm%' THEN 170 ELSE 158 END,
CASE WHEN alias LIKE 'f%' THEN 172 WHEN alias LIKE 'm%' THEN 188 ELSE 185 END, CASE WHEN alias LIKE 'f%' THEN 172 WHEN alias LIKE 'm%' THEN 188 ELSE 185 END,
'preferred', 'preferred',
'[\"321181\",\"321100\"]', 'required', '[\"never_married\"]', 'required', '["321181","321100"]', 'required', '["never_married"]', 'required',
CASE alias WHEN 'f02' THEN 'college' WHEN 'm02' THEN 'college' WHEN 'f01' THEN 'bachelor' CASE alias WHEN 'f02' THEN 'college' WHEN 'm02' THEN 'college' WHEN 'f01' THEN 'bachelor'
WHEN 'm01' THEN 'bachelor' WHEN 'm05' THEN 'bachelor' ELSE NULL END, WHEN 'm01' THEN 'bachelor' WHEN 'm05' THEN 'bachelor' ELSE NULL END,
'preferred' 'preferred'
@@ -161,7 +164,7 @@ FROM user_data;
-- 实名认证 -- 实名认证
INSERT INTO user_identities (id, user_id, real_name_enc, id_number_enc, id_number_hash, gender, birth_date, verification_status, provider, verified_at) INSERT INTO user_identities (id, user_id, real_name_enc, id_number_enc, id_number_hash, gender, birth_date, verification_status, provider, verified_at)
SELECT gen_random_uuid(), id, encode(('demo_enc_'||alias)::bytea,'escape'), encode(('demo_id_'||alias)::bytea,'escape'), 'demo_sha256_'||alias, gender, birth_date::date, 'verified', 'mock', NOW()-INTERVAL '1 day') SELECT gen_random_uuid(), id, encode(('demo_enc_'||alias)::bytea,'escape'), encode(('demo_id_'||alias)::bytea,'escape'), 'demo_sha256_'||alias, gender, birth_date::date, 'verified', 'mock', NOW()-INTERVAL '1 day'
FROM user_data; FROM user_data;
-- 兴趣 -- 兴趣
@@ -276,16 +279,15 @@ VALUES
-- ============================================================ -- ============================================================
-- 8. Conversations & Messages -- 8. Conversations & Messages
-- ==================================================== -- ====================================================
WITH conv_ids AS ( CREATE TEMP TABLE _conv_result ON COMMIT DROP AS
SELECT gen_random_uuid() as id, match_id FROM matches WHERE status='active' ORDER BY created_at SELECT gen_random_uuid() as id, id AS match_id FROM matches WHERE status IN ('active','successful') ORDER BY created_at;
)
INSERT INTO conversations (id, match_id, status, last_message_at) INSERT INTO conversations (id, match_id, status, last_message_at)
SELECT id, match_id, 'active', NOW()-INTERVAL '5 days' FROM conv_ids SELECT id, match_id, 'active', NOW()-INTERVAL '5 days' FROM _conv_result;
RETURNING id, match_id INTO TEMP TABLE _conv_result (id, match_id);
-- members -- members
WITH _match_pairs AS ( WITH _match_pairs AS (
SELECT m.user_a_id, m.user_b_id FROM matches m JOIN _conv_result c ON c.match_id=m.id SELECT m.id AS match_id, m.user_a_id, m.user_b_id FROM matches m JOIN _conv_result c ON c.match_id=m.id
) )
INSERT INTO conversation_members (conversation_id, user_id, unread_count, can_send, joined_at) INSERT INTO conversation_members (conversation_id, user_id, unread_count, can_send, joined_at)
SELECT (SELECT id FROM _conv_result WHERE match_id=(SELECT match_id FROM _match_pairs WHERE user_a_id=up.user_a_id LIMIT 1)), up.user_a_id, 0, true, NOW() FROM _match_pairs up SELECT (SELECT id FROM _conv_result WHERE match_id=(SELECT match_id FROM _match_pairs WHERE user_a_id=up.user_a_id LIMIT 1)), up.user_a_id, 0, true, NOW() FROM _match_pairs up
@@ -348,7 +350,7 @@ VALUES
-- ============================================================ -- ============================================================
-- 11. 活动报名 -- 11. 活动报名
-- ==================================================== -- ====================================================
WITH act1 AS (SELECT id FROM activities WHERE title LIKE '夏季%' LIMIT 1), WITH act1 AS (SELECT id FROM activities WHERE title LIKE '%夏季%' LIMIT 1),
mgr2 AS (SELECT id FROM operators WHERE username='activitymgr' LIMIT 1) mgr2 AS (SELECT id FROM operators WHERE username='activitymgr' LIMIT 1)
INSERT INTO activity_registrations (id, activity_id, user_id, status, registered_at, reviewed_by, reviewed_at, checkin_status) INSERT INTO activity_registrations (id, activity_id, user_id, status, registered_at, reviewed_by, reviewed_at, checkin_status)
SELECT gen_random_uuid(), (SELECT id FROM act1), ud.id, SELECT gen_random_uuid(), (SELECT id FROM act1), ud.id,
@@ -364,14 +366,14 @@ FROM user_data ud WHERE ud.alias IN ('f01','f02','f03','f04','f05','m01','m02','
-- ============================================================ -- ============================================================
-- 12. 活动互选意向 -- 12. 活动互选意向
-- ==================================================== -- ====================================================
WITH act1 AS (SELECT id FROM activities WHERE title LIKE '夏季%' LIMIT 1) WITH act1 AS (SELECT id FROM activities WHERE title LIKE '%夏季%' LIMIT 1)
INSERT INTO activity_interests (id, source_user_id, target_user_id, activity_id, status, confirmed_at, created_at) INSERT INTO activity_interests (id, source_user_id, target_user_id, activity_id, status, confirmed_at, created_at)
SELECT gen_random_uuid(), SELECT gen_random_uuid(),
(SELECT id FROM user_data WHERE alias='f01'), (SELECT id FROM user_data WHERE alias='m01'), (SELECT id FROM act1), 'mutual', '2026-08-15T17:00:00Z', '2026-08-15T17:00:00Z' (SELECT id FROM user_data WHERE alias='f01'), (SELECT id FROM user_data WHERE alias='m01'), (SELECT id FROM act1), 'mutual', '2026-08-15T17:00:00Z'::timestamptz, '2026-08-15T17:00:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), UNION ALL SELECT gen_random_uuid(),
(SELECT id FROM user_data WHERE alias='f03'), (SELECT id FROM user_data WHERE alias='m03'), (SELECT id FROM act1), 'mutual', '2026-08-15T17:05:00Z', '2026-08-15T17:05:00Z' (SELECT id FROM user_data WHERE alias='f03'), (SELECT id FROM user_data WHERE alias='m03'), (SELECT id FROM act1), 'mutual', '2026-08-15T17:05:00Z'::timestamptz, '2026-08-15T17:05:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), UNION ALL SELECT gen_random_uuid(),
(SELECT id FROM user_data WHERE alias='f05'), (SELECT id FROM user_data WHERE alias='m05'), (SELECT id FROM act1), 'expressed','2026-08-15T17:10:00Z', '2026-08-15T17:10:00Z'; (SELECT id FROM user_data WHERE alias='f05'), (SELECT id FROM user_data WHERE alias='m05'), (SELECT id FROM act1), 'expressed','2026-08-15T17:10:00Z'::timestamptz, '2026-08-15T17:10:00Z'::timestamptz;
-- ============================================================ -- ============================================================
-- 13. 红娘服务 -- 13. 红娘服务
@@ -405,26 +407,26 @@ VALUES
-- 14. 系统通知 -- 14. 系统通知
-- ==================================================== -- ====================================================
INSERT INTO notifications (id, user_id, type, title, content, business_type, read_status, created_at) INSERT INTO notifications (id, user_id, type, title, content, business_type, read_status, created_at)
SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f01'), 'match', '你们互相喜欢!', '张伟也喜欢了你,可以开始聊天啦~', 'match', 'read', '2026-06-01T10:05:00Z' SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f01'), 'match', '你们互相喜欢!', '张伟也喜欢了你,可以开始聊天啦~', 'match', 'read', '2026-06-01T10:05:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m01'), 'match', '你们互相喜欢!', '小芳也喜欢了你,可以开始聊天啦~', 'match', 'read', '2026-06-01T10:05:00Z' UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m01'), 'match', '你们互相喜欢!', '小芳也喜欢了你,可以开始聊天啦~', 'match', 'read', '2026-06-01T10:05:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f03'), 'match', '你们互相喜欢!', '王磊也喜欢了你,可以开始聊天啦~', 'match', 'read', '2026-06-03T09:30:00Z' UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f03'), 'match', '你们互相喜欢!', '王磊也喜欢了你,可以开始聊天啦~', 'match', 'read', '2026-06-03T09:30:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m03'), 'match', '你们互相喜欢!', '婷婷也喜欢了你,可以开始聊天啦~', 'match', 'unread','2026-06-03T09:30:00Z' UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m03'), 'match', '你们互相喜欢!', '婷婷也喜欢了你,可以开始聊天啦~', 'match', 'unread','2026-06-03T09:30:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f05'), 'match', '你们互相喜欢!', '孙浩也喜欢了你,可以开始聊天啦~', 'match', 'read', '2026-06-05T10:05:00Z' UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f05'), 'match', '你们互相喜欢!', '孙浩也喜欢了你,可以开始聊天啦~', 'match', 'read', '2026-06-05T10:05:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m05'), 'match', '你们互相喜欢!', '慧琴也喜欢了你,可以开始聊天啦~', 'match', 'read', '2026-06-05T10:05:00Z' UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m05'), 'match', '你们互相喜欢!', '慧琴也喜欢了你,可以开始聊天啦~', 'match', 'read', '2026-06-05T10:05:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f05'), 'system', '恭喜牵手成功!', '您与孙浩已成功牵手,祝你们幸福!', 'match', 'read', '2026-07-01T10:30:00Z' UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f05'), 'system', '恭喜牵手成功!', '您与孙浩已成功牵手,祝你们幸福!', 'match', 'read', '2026-07-01T10:30:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m05'), 'system', '恭喜牵手成功!', '您与慧琴已成功牵手,祝你们幸福!', 'match', 'read', '2026-07-01T10:30:00Z' UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m05'), 'system', '恭喜牵手成功!', '您与慧琴已成功牵手,祝你们幸福!', 'match', 'read', '2026-07-01T10:30:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f01'), 'activity', '活动报名已确认', '您已成功报名「丹阳公益单身联谊会」', 'activity', 'read', '2026-07-05T10:30:00Z' UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f01'), 'activity', '活动报名已确认', '您已成功报名「丹阳公益单身联谊会」', 'activity', 'read', '2026-07-05T10:30:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f05'), 'activity', '活动报名已确认', '您已成功报名「丹阳公益单身联谊会」', 'activity', 'unread','2026-07-07T09:20:00Z' UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f05'), 'activity', '活动报名已确认', '您已成功报名「丹阳公益单身联谊会」', 'activity', 'unread','2026-07-07T09:20:00Z'::timestamptz
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f02'), 'matchmaker', '红娘已为您服务', '您的红娘服务申请已被分配,红娘小王将在24小时内与您联系', 'matchmaker', 'read', '2026-06-20T10:30:00Z'; UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f02'), 'matchmaker', '红娘已为您服务', '您的红娘服务申请已被分配,红娘小王将在24小时内与您联系', 'matchmaker', 'read', '2026-06-20T10:30:00Z'::timestamptz;
-- ============================================================ -- ============================================================
-- 15. 同意记录 -- 15. 同意记录
-- ==================================================== -- ====================================================
INSERT INTO consent_records (id, user_id, type, version, agreed_at, ip_address, user_agent) INSERT INTO consent_records (id, user_id, type, version, agreed_at, ip_address, user_agent)
SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f01'), 'terms_of_service', '1.0', '2026-03-15T10:00:00Z', '127.0.0.1', 'WeChat/8.0' SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f01'), 'terms_of_service', '1.0', '2026-03-15T10:00:00Z'::timestamptz, '127.0.0.1', 'WeChat/8.0'
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f01'), 'privacy_policy', '1.0', '2026-03-15T10:00:00Z', '127.0.0.1', 'WeChat/8.0' UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f01'), 'privacy_policy', '1.0', '2026-03-15T10:00:00Z'::timestamptz, '127.0.0.1', 'WeChat/8.0'
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m01'), 'terms_of_service', '1.0', '2026-03-10T09:00:00Z', '127.0.0.1', 'WeChat/8.0' UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m01'), 'terms_of_service', '1.0', '2026-03-10T09:00:00Z'::timestamptz, '127.0.0.1', 'WeChat/8.0'
UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m01'), 'privacy_policy', '1.0', '2026-03-10T09:00:00Z', '127.0.0.1', 'WeChat/8.0'; UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='m01'), 'privacy_policy', '1.0', '2026-03-10T09:00:00Z'::timestamptz, '127.0.0.1', 'WeChat/8.0';
-- ============================================================ -- ============================================================
-- 16. 审核原因字典 -- 16. 审核原因字典
@@ -448,7 +450,7 @@ DROP TABLE IF EXISTS _conv_result;
-- ============================================================ -- ============================================================
INSERT INTO system_configs (config_key, config_value, description) VALUES INSERT INTO system_configs (config_key, config_value, description) VALUES
('livenessVerification.enabled', 'false', '人脸核验功能开关(V1.1预留,默认关闭)'), ('livenessVerification.enabled', 'false', '人脸核验功能开关(V1.1预留,默认关闭)'),
('localEligibility.evidencePolicy', 'need_based', '本地资格佐证策略:need_based=按需触发 / mandatory=全部强制'), ('localEligibility.evidencePolicy', '"need_based"', '本地资格佐证策略:need_based=按需触发 / mandatory=全部强制'),
('counseling.enabled', 'true', '婚恋咨询功能开关'), ('counseling.enabled', 'true', '婚恋咨询功能开关'),
('premarital.enabled', 'true', '婚前辅导功能开关'), ('premarital.enabled', 'true', '婚前辅导功能开关'),
('serviceLocation.enabled', 'true', '善缘服务站功能开关'), ('serviceLocation.enabled', 'true', '善缘服务站功能开关'),
@@ -0,0 +1,4 @@
ALTER TABLE operators ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMPTZ;
CREATE INDEX IF NOT EXISTS idx_operators_active_username
ON operators(username) WHERE deleted_at IS NULL;
@@ -0,0 +1,3 @@
ALTER TABLE audit_logs
ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMPTZ;