diff --git a/backend/src/main/resources/db/demo-seed-final.sql b/backend/src/main/resources/db/demo-seed-final.sql index b85c1e9..230768e 100644 --- a/backend/src/main/resources/db/demo-seed-final.sql +++ b/backend/src/main/resources/db/demo-seed-final.sql @@ -5,72 +5,73 @@ BEGIN; SET session_replication_role = 'replica'; -- 1. 组织 -INSERT INTO organizations (name, type, contact_name, status) VALUES -('丹阳市妇女联合会', 'women_federation', '张丽华', 'active'), -('丹阳市总工会', 'trade_union', '李明远', 'active'), -('丹阳市慈善基金会', 'charity_center', '王秀英', 'active'); +INSERT INTO organizations (id, name, type, contact_name, status) VALUES +(gen_random_uuid(), '丹阳市妇女联合会', 'women_federation', '张丽华', 'active'), +(gen_random_uuid(), '丹阳市总工会', 'trade_union', '李明远', 'active'), +(gen_random_uuid(), '丹阳市慈善基金会', 'charity_center', '王秀英', 'active'); -- 2. 工作人员(V1.0原有 + V1.1新增) -INSERT INTO operators (organization_id, name, username, password_hash, status) -SELECT id, '陈主任', 'admin', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' -FROM organizations WHERE type='women_federation' LIMIT 1 +INSERT INTO operators (id, organization_id, name, username, password_hash, status) +SELECT gen_random_uuid(), id, '陈主任', 'admin', '$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active' +FROM organizations WHERE type='women_federation' UNION ALL -SELECT id, '红娘小王', 'wanghongniang', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' -FROM organizations WHERE type='women_federation' LIMIT 1 +SELECT gen_random_uuid(), id, '红娘小王', 'wanghongniang', '$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active' +FROM organizations WHERE type='women_federation' UNION ALL -SELECT id, '审核员小张', 'reviewer01', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' -FROM organizations WHERE type='charity_center' LIMIT 1 +SELECT gen_random_uuid(), id, '审核员小张', 'reviewer01', '$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active' +FROM organizations WHERE type='charity_center' UNION ALL -SELECT id, '活动管理员赵', 'activitymgr','$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' -FROM organizations WHERE type='trade_union' LIMIT 1 +SELECT gen_random_uuid(), id, '活动管理员赵', 'activitymgr','$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active' +FROM organizations WHERE type='trade_union' -- V1.1 新增演示操作员 UNION ALL -SELECT id, '服务站小李', 'stationop', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' -FROM organizations WHERE type='women_federation' LIMIT 1 +SELECT gen_random_uuid(), id, '服务站小李', 'stationop', '$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active' +FROM organizations WHERE type='women_federation' UNION ALL -SELECT id, '咨询师小周', 'counselor', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' -FROM organizations WHERE type='charity_center' LIMIT 1 +SELECT gen_random_uuid(), id, '咨询师小周', 'counselor', '$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active' +FROM organizations WHERE type='charity_center' UNION ALL -SELECT id, '内容编辑小吴', 'contenteditor','$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHdBfKYuPIiCTB6MJJDEaK', 'active' -FROM organizations WHERE type='women_federation' LIMIT 1; +SELECT gen_random_uuid(), id, '内容编辑小吴', 'contenteditor','$2b$10$2OtF1WNZuVJ7bAjIUuO1p.NzRgquJhco/11W2640cvXfkp8xWNATK', 'active' +FROM organizations WHERE type='women_federation'; -- 操作员角色绑定(V1.0原有 + V1.1新增) INSERT INTO operator_roles (operator_id, role_id) -- V1.0: admin = super_admin + platform_admin -SELECT o.id, '00000000-0000-0000-0000-000000000001' FROM operators WHERE username='admin' -UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000002' 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'::uuid FROM operators o WHERE username='admin' -- 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-000000000006' 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'::uuid FROM operators o WHERE username='wanghongniang' -- 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-000000000007' 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'::uuid FROM operators o WHERE username='reviewer01' -- 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-000000000008' 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'::uuid FROM operators o WHERE username='activitymgr' -- 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 -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 -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并关联) +CREATE TEMP TABLE user_data ON COMMIT DROP 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 - ('demo_openid_f01','normal','searching',true,'2026-03-15T10:00:00Z'), - ('demo_openid_f02','normal','searching',true,'2026-03-20T14:30:00Z'), - ('demo_openid_f03','normal','searching',true,'2026-04-01T09:15:00Z'), - ('demo_openid_f04','normal','paused',true,'2026-04-10T16:00:00Z'), - ('demo_openid_f05','normal','searching',true,'2026-05-01T11:20:00Z'), - ('demo_openid_f06','normal','searching',true,'2026-05-15T08:45:00Z'), - ('demo_openid_m01','normal','searching',true,'2026-03-10T09:00:00Z'), - ('demo_openid_m02','normal','getting_to_know',true,'2026-03-25T13:00:00Z'), - ('demo_openid_m03','normal','searching',true,'2026-04-05T15:30:00Z'), - ('demo_openid_m04','normal','searching',true,'2026-04-20T10:00:00Z'), - ('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_f01','normal','searching',true,'2026-03-15T10:00:00Z'), + (gen_random_uuid(),'demo_openid_f02','normal','searching',true,'2026-03-20T14:30:00Z'), + (gen_random_uuid(),'demo_openid_f03','normal','searching',true,'2026-04-01T09:15:00Z'), + (gen_random_uuid(),'demo_openid_f04','normal','paused',true,'2026-04-10T16:00:00Z'), + (gen_random_uuid(),'demo_openid_f05','normal','searching',true,'2026-05-01T11:20:00Z'), + (gen_random_uuid(),'demo_openid_f06','normal','searching',true,'2026-05-15T08:45:00Z'), + (gen_random_uuid(),'demo_openid_m01','normal','searching',true,'2026-03-10T09:00:00Z'), + (gen_random_uuid(),'demo_openid_m02','normal','getting_to_know',true,'2026-03-25T13:00:00Z'), + (gen_random_uuid(),'demo_openid_m03','normal','searching',true,'2026-04-05T15:30:00Z'), + (gen_random_uuid(),'demo_openid_m04','normal','searching',true,'2026-04-20T10:00:00Z'), + (gen_random_uuid(),'demo_openid_m05','normal','matched_successfully',true,'2026-05-01T14:00:00Z'), + (gen_random_uuid(),'demo_openid_m06','normal','searching',true,'2026-05-10T16:30:00Z') RETURNING id, wechat_openid ), user_map AS ( SELECT id, wechat_openid, @@ -84,7 +85,7 @@ WITH demo_users AS ( END as alias FROM demo_users ), -user_data AS ( +prepared_user_data AS ( SELECT id, wechat_openid, alias, CASE alias WHEN 'f01' THEN '小芳' WHEN 'f02' THEN '晓燕' WHEN 'f03' THEN '婷婷' WHEN 'f04' THEN '美玲' WHEN 'f05' THEN '慧琴' WHEN 'f06' THEN '秀英' @@ -134,6 +135,8 @@ user_data AS ( END as completion FROM user_map ) +SELECT * FROM prepared_user_data; + INSERT INTO user_profiles (user_id, display_name, gender, birth_date, height_cm, region_code, region_name, marital_status, children_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 172 WHEN alias LIKE 'm%' THEN 188 ELSE 185 END, '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' WHEN 'm01' THEN 'bachelor' WHEN 'm05' THEN 'bachelor' ELSE NULL END, '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) -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; -- 兴趣 @@ -276,16 +279,15 @@ VALUES -- ============================================================ -- 8. Conversations & Messages -- ==================================================== -WITH conv_ids AS ( - SELECT gen_random_uuid() as id, match_id FROM matches WHERE status='active' ORDER BY created_at -) +CREATE TEMP TABLE _conv_result ON COMMIT DROP AS +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) -SELECT id, match_id, 'active', NOW()-INTERVAL '5 days' FROM conv_ids -RETURNING id, match_id INTO TEMP TABLE _conv_result (id, match_id); +SELECT id, match_id, 'active', NOW()-INTERVAL '5 days' FROM _conv_result; -- members 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) 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. 活动报名 -- ==================================================== -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) 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, @@ -364,14 +366,14 @@ FROM user_data ud WHERE ud.alias IN ('f01','f02','f03','f04','f05','m01','m02',' -- ============================================================ -- 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) 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(), - (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(), - (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. 红娘服务 @@ -405,26 +407,26 @@ VALUES -- 14. 系统通知 -- ==================================================== 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' -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='f03'), 'match', '你们互相喜欢!', '王磊也喜欢了你,可以开始聊天啦~', 'match', 'read', '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' -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='m05'), 'match', '你们互相喜欢!', '慧琴也喜欢了你,可以开始聊天啦~', 'match', 'read', '2026-06-05T10:05:00Z' -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='m05'), 'system', '恭喜牵手成功!', '您与慧琴已成功牵手,祝你们幸福!', 'match', 'read', '2026-07-01T10:30:00Z' -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='f05'), 'activity', '活动报名已确认', '您已成功报名「丹阳公益单身联谊会」', 'activity', 'unread','2026-07-07T09:20:00Z' -UNION ALL SELECT gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f02'), 'matchmaker', '红娘已为您服务', '您的红娘服务申请已被分配,红娘小王将在24小时内与您联系', 'matchmaker', 'read', '2026-06-20T10:30: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'::timestamptz +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'::timestamptz +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'::timestamptz +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'::timestamptz +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'::timestamptz +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. 同意记录 -- ==================================================== 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' -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='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'), 'privacy_policy', '1.0', '2026-03-10T09: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'::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'::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'::timestamptz, '127.0.0.1', 'WeChat/8.0'; -- ============================================================ -- 16. 审核原因字典 @@ -448,7 +450,7 @@ DROP TABLE IF EXISTS _conv_result; -- ============================================================ INSERT INTO system_configs (config_key, config_value, description) VALUES ('livenessVerification.enabled', 'false', '人脸核验功能开关(V1.1预留,默认关闭)'), -('localEligibility.evidencePolicy', 'need_based', '本地资格佐证策略:need_based=按需触发 / mandatory=全部强制'), +('localEligibility.evidencePolicy', '"need_based"', '本地资格佐证策略:need_based=按需触发 / mandatory=全部强制'), ('counseling.enabled', 'true', '婚恋咨询功能开关'), ('premarital.enabled', 'true', '婚前辅导功能开关'), ('serviceLocation.enabled', 'true', '善缘服务站功能开关'), diff --git a/backend/src/main/resources/db/migration/V030__add_operator_soft_delete.sql b/backend/src/main/resources/db/migration/V030__add_operator_soft_delete.sql new file mode 100644 index 0000000..71db3b6 --- /dev/null +++ b/backend/src/main/resources/db/migration/V030__add_operator_soft_delete.sql @@ -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; diff --git a/backend/src/main/resources/db/migration/V031__align_audit_log_base_fields.sql b/backend/src/main/resources/db/migration/V031__align_audit_log_base_fields.sql new file mode 100644 index 0000000..97276e0 --- /dev/null +++ b/backend/src/main/resources/db/migration/V031__align_audit_log_base_fields.sql @@ -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;