CI/CD Pipeline / Backend Build & Test (push) Canceled after 0s
CI/CD Pipeline / Admin Web Build (push) Canceled after 0s
CI/CD Pipeline / Mini Program Compile Check (push) Canceled after 0s
CI/CD Pipeline / Migration Validation (push) Canceled after 0s
CI/CD Pipeline / Test Shell Guard (Phase 23 Gate) (push) Canceled after 0s
CI/CD Pipeline / UI Contracts (source-structure gates) (push) Canceled after 0s
CI/CD Pipeline / E2E (live stack) (push) Canceled after 0s
483 lines
35 KiB
PL/PgSQL
483 lines
35 KiB
PL/PgSQL
-- ============================================================
|
|
-- 丹阳公益婚恋服务平台 — Demo Seed 最终版(单次事务,纯 SQL)
|
|
-- ============================================================
|
|
BEGIN;
|
|
|
|
-- 1. 组织
|
|
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 (id, organization_id, display_id, name, username, password_hash, status)
|
|
SELECT gen_random_uuid(), id, 'HN20261019001', '陈主任', 'admin', '$2a$10$rKkmfph0xE1zQgqbBteLhO34H64Qt7ZxNDevd/P00inoKhA6mPvTG', 'active'
|
|
FROM organizations WHERE type='women_federation'
|
|
UNION ALL
|
|
SELECT gen_random_uuid(), id, 'HN20261019002', '红娘小王', 'wanghongniang', '$2a$10$rKkmfph0xE1zQgqbBteLhO34H64Qt7ZxNDevd/P00inoKhA6mPvTG', 'active'
|
|
FROM organizations WHERE type='women_federation'
|
|
UNION ALL
|
|
SELECT gen_random_uuid(), id, 'HN20261019003', '审核员小张', 'reviewer01', '$2a$10$rKkmfph0xE1zQgqbBteLhO34H64Qt7ZxNDevd/P00inoKhA6mPvTG', 'active'
|
|
FROM organizations WHERE type='charity_center'
|
|
UNION ALL
|
|
SELECT gen_random_uuid(), id, 'HN20261019004', '活动管理员赵', 'activitymgr','$2a$10$rKkmfph0xE1zQgqbBteLhO34H64Qt7ZxNDevd/P00inoKhA6mPvTG', 'active'
|
|
FROM organizations WHERE type='trade_union'
|
|
-- V1.1 新增演示操作员
|
|
UNION ALL
|
|
SELECT gen_random_uuid(), id, 'HN20261019005', '服务站小李', 'stationop', '$2a$10$rKkmfph0xE1zQgqbBteLhO34H64Qt7ZxNDevd/P00inoKhA6mPvTG', 'active'
|
|
FROM organizations WHERE type='women_federation'
|
|
UNION ALL
|
|
SELECT gen_random_uuid(), id, 'HN20261019006', '咨询师小周', 'counselor', '$2a$10$rKkmfph0xE1zQgqbBteLhO34H64Qt7ZxNDevd/P00inoKhA6mPvTG', 'active'
|
|
FROM organizations WHERE type='charity_center'
|
|
UNION ALL
|
|
SELECT gen_random_uuid(), id, 'HN20261019007', '内容编辑小吴', 'contenteditor','$2a$10$rKkmfph0xE1zQgqbBteLhO34H64Qt7ZxNDevd/P00inoKhA6mPvTG', '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'::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
|
|
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
|
|
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
|
|
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
|
|
UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000010'::uuid FROM operators o WHERE username='stationop'
|
|
-- V1.1: counselor = counselor
|
|
UNION ALL SELECT o.id, '00000000-0000-0000-0000-000000000011'::uuid FROM operators o WHERE username='counselor'
|
|
-- V1.1: contenteditor = content_editor
|
|
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 (id, wechat_openid, account_status, relationship_status, recommendation_enabled, created_at)
|
|
VALUES
|
|
(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,
|
|
CASE wechat_openid
|
|
WHEN 'demo_openid_f01' THEN 'f01' WHEN 'demo_openid_f02' THEN 'f02'
|
|
WHEN 'demo_openid_f03' THEN 'f03' WHEN 'demo_openid_f04' THEN 'f04'
|
|
WHEN 'demo_openid_f05' THEN 'f05' WHEN 'demo_openid_f06' THEN 'f06'
|
|
WHEN 'demo_openid_m01' THEN 'm01' WHEN 'demo_openid_m02' THEN 'm02'
|
|
WHEN 'demo_openid_m03' THEN 'm03' WHEN 'demo_openid_m04' THEN 'm04'
|
|
WHEN 'demo_openid_m05' THEN 'm05' WHEN 'demo_openid_m06' THEN 'm06'
|
|
END as alias
|
|
FROM demo_users
|
|
),
|
|
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 '秀英'
|
|
WHEN 'm01' THEN '张伟' WHEN 'm02' THEN '李强' WHEN 'm03' THEN '王磊'
|
|
WHEN 'm04' THEN '赵明' WHEN 'm05' THEN '孙浩' WHEN 'm06' THEN '周洋' END as display_name,
|
|
CASE WHEN alias LIKE 'f%' THEN 'female' ELSE 'male' END as gender,
|
|
CASE alias
|
|
WHEN 'f01' THEN '1995-06-15' WHEN 'f02' THEN '1993-09-20' WHEN 'f03' THEN '1998-02-10'
|
|
WHEN 'f04' THEN '1990-11-05' WHEN 'f05' THEN '1996-07-22' WHEN 'f06' THEN '1992-04-18'
|
|
WHEN 'm01' THEN '1992-01-10' WHEN 'm02' THEN '1990-08-25' WHEN 'm03' THEN '1997-12-03'
|
|
WHEN 'm04' THEN '1988-05-30' WHEN 'm05' THEN '1994-03-14' WHEN 'm06' THEN '1999-08-08'
|
|
END as birth_date,
|
|
CASE alias
|
|
WHEN 'f01' THEN 162 WHEN 'f02' THEN 165 WHEN 'f03' THEN 158
|
|
WHEN 'f04' THEN 160 WHEN 'f05' THEN 163 WHEN 'f06' THEN 157
|
|
WHEN 'm01' THEN 175 WHEN 'm02' THEN 178 WHEN 'm03' THEN 180
|
|
WHEN 'm04' THEN 172 WHEN 'm05' THEN 182 WHEN 'm06' THEN 176
|
|
END as height_cm,
|
|
CASE WHEN alias IN ('f01','f02','f04','f05','m01','m02','m04','m05') THEN '321181'
|
|
WHEN alias IN ('f03','m03') THEN '321100' WHEN alias='m06' THEN '320500' END as region_code,
|
|
CASE WHEN alias IN ('f01','f02','f04','f05','m01','m02','m04','m05') THEN '丹阳'
|
|
WHEN alias IN ('f03','m03') THEN '镇江' WHEN alias='m06' THEN '苏州' END as region_name,
|
|
CASE alias WHEN 'f02' THEN 'divorced' WHEN 'f06' THEN 'widowed' ELSE 'never_married' END as marital_status,
|
|
CASE alias
|
|
WHEN 'f01' THEN 'bachelor' WHEN 'f02' THEN 'college' WHEN 'f03' THEN 'master'
|
|
WHEN 'f04' THEN 'senior_high' WHEN 'f05' THEN 'bachelor' WHEN 'f06' THEN 'junior_high'
|
|
WHEN 'm01' THEN 'bachelor' WHEN 'm02' THEN 'master' WHEN 'm03' THEN 'college'
|
|
WHEN 'm04' THEN 'senior_high' WHEN 'm05' THEN 'bachelor' WHEN 'm06' THEN 'master'
|
|
END as education_code,
|
|
CASE alias
|
|
WHEN 'f01' THEN 'clerical' WHEN 'f02' THEN 'teacher' WHEN 'f03' THEN 'designer'
|
|
WHEN 'f04' THEN 'factory' WHEN 'f05' THEN 'nurse' WHEN 'f06' THEN 'farmer'
|
|
WHEN 'm01' THEN 'engineer' WHEN 'm02' THEN 'manager' WHEN 'm03' THEN 'programmer'
|
|
WHEN 'm04' THEN 'sales' WHEN 'm05' THEN 'doctor' WHEN 'm06' THEN 'researcher'
|
|
END as occupation_code,
|
|
CASE alias WHEN 'f03' THEN 'sometimes' WHEN 'f06' THEN 'often' WHEN 'm02' THEN 'sometimes'
|
|
WHEN 'm04' THEN 'often' WHEN 'm05' THEN 'sometimes' ELSE 'never' END as smoking,
|
|
CASE alias WHEN 'f03' THEN 'often' WHEN 'f06' THEN 'often' WHEN 'm02' THEN 'often'
|
|
WHEN 'm04' THEN 'often' ELSE 'sometimes' END as drinking,
|
|
CASE WHEN alias IN ('f03','m06') THEN '否' ELSE '是' END as long_term,
|
|
CASE WHEN alias IN ('f03','m06') THEN '否' ELSE '是' END as future,
|
|
CASE WHEN alias IN ('f03','m06') THEN '恋爱' ELSE '结婚' END as goal,
|
|
CASE alias
|
|
WHEN 'f01' THEN 90 WHEN 'f02' THEN 95 WHEN 'f03' THEN 85 WHEN 'f04' THEN 70
|
|
WHEN 'f05' THEN 92 WHEN 'f06' THEN 60 WHEN 'm01' THEN 88 WHEN 'm02' THEN 95
|
|
WHEN 'm03' THEN 82 WHEN 'm04' THEN 75 WHEN 'm05' THEN 97 WHEN 'm06' THEN 80
|
|
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,
|
|
long_term_danyang, future_danyang, relationship_goal, profile_completion, profile_status)
|
|
SELECT id, display_name, gender, birth_date::date, height_cm,
|
|
region_code, region_name, marital_status, 'none',
|
|
education_code, occupation_code, smoking, drinking,
|
|
long_term, future, goal, completion, 'approved'
|
|
FROM user_data;
|
|
|
|
-- 偏好
|
|
INSERT INTO user_preferences (user_id, min_age, max_age, age_priority, min_height_cm, max_height_cm, height_priority, region_scope, region_priority, marital_statuses, marital_priority, min_education_code, education_priority)
|
|
SELECT id,
|
|
CASE WHEN alias LIKE 'f%' THEN 28 WHEN alias LIKE 'm%' THEN 22 ELSE 25 END,
|
|
CASE WHEN alias LIKE 'f%' THEN 40 WHEN alias LIKE 'm%' THEN 38 ELSE 35 END,
|
|
'required',
|
|
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',
|
|
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'
|
|
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'
|
|
FROM user_data;
|
|
|
|
-- 兴趣
|
|
WITH interests AS (
|
|
SELECT ud.id as user_id, ic.code
|
|
FROM user_data ud
|
|
CROSS JOIN (VALUES ('reading'),('cooking'),('travel'),('sports'),('music'),('outdoor'),
|
|
('photography'),('dance'),('movie'),('pets'),('fitness'),('charity'),('gardening'),
|
|
('gaming'),('hiking'),('coding'),('cars'),('running'),('research')) ic(code)
|
|
WHERE (ud.alias='f01' AND ic.code IN ('reading','cooking','travel'))
|
|
OR (ud.alias='f02' AND ic.code IN ('sports','music','outdoor'))
|
|
OR (ud.alias='f03' AND ic.code IN ('photography','dance','movie'))
|
|
OR (ud.alias='f04' AND ic.code IN ('pets','cooking'))
|
|
OR (ud.alias='f05' AND ic.code IN ('reading','fitness','charity'))
|
|
OR (ud.alias='f06' AND ic.code IN ('gardening','cooking'))
|
|
OR (ud.alias='m01' AND ic.code IN ('sports','gaming','travel'))
|
|
OR (ud.alias='m02' AND ic.code IN ('reading','investment','hiking'))
|
|
OR (ud.alias='m03' AND ic.code IN ('gaming','music','coding'))
|
|
OR (ud.alias='m04' AND ic.code IN ('cars','cooking'))
|
|
OR (ud.alias='m05' AND ic.code IN ('running','reading','charity'))
|
|
OR (ud.alias='m06' AND ic.code IN ('research','travel','photography'))
|
|
)
|
|
INSERT INTO user_interests (user_id, interest_code) SELECT user_id, code FROM interests;
|
|
|
|
-- 隐私设置
|
|
INSERT INTO user_privacy_settings (user_id, visible_in_recommendations, visible_in_search, show_occupation, show_lifestyle_photos, receive_activity_recommendations, accept_matchmaker_recommendations)
|
|
SELECT id, true,
|
|
CASE WHEN alias IN ('f03','f06','m04') THEN false ELSE true END,
|
|
CASE WHEN alias IN ('f02','f04','m02','m03') THEN false ELSE true END,
|
|
CASE WHEN alias IN ('f02','m02','m03') THEN false ELSE true END,
|
|
CASE WHEN alias IN ('f05','m03') THEN false ELSE true END,
|
|
CASE WHEN alias='f03' THEN false ELSE true END
|
|
FROM user_data;
|
|
|
|
-- 照片
|
|
WITH photo_source AS (
|
|
SELECT id, alias FROM user_data
|
|
)
|
|
INSERT INTO user_photos (id, user_id, file_key, photo_type, sort_order, review_status)
|
|
SELECT gen_random_uuid(), id, 'photos/demo/'||alias||'/avatar.jpg', 'avatar', 0, 'approved' FROM photo_source
|
|
UNION ALL
|
|
SELECT gen_random_uuid(), id, 'photos/demo/'||alias||'/lifestyle1.jpg', 'lifestyle', 1, 'approved' FROM photo_source;
|
|
|
|
-- ============================================================
|
|
-- 4. 审核任务
|
|
-- ============================================================
|
|
INSERT INTO review_tasks (id, user_id, review_type, status, assigned_operator_id, submitted_at, started_at, completed_at, final_comment, version, display_id)
|
|
SELECT gen_random_uuid(), ud.id, 'initial_profile', 'approved',
|
|
(SELECT id FROM operators WHERE username='reviewer01'),
|
|
NOW()-INTERVAL '60 days', NOW()-INTERVAL '59 days', NOW()-INTERVAL '58 days', '资料完整', 1,
|
|
'RW'||LPAD(ROW_NUMBER() OVER (ORDER BY ud.alias)::text, 11, '0')
|
|
FROM user_data ud WHERE ud.alias IN ('f01','f02','f03','m01','m02','m03','m05');
|
|
|
|
-- ============================================================
|
|
-- 5. 用户关系
|
|
-- ============================================================
|
|
WITH f01 AS (SELECT id FROM user_data WHERE alias='f01'),
|
|
f02 AS (SELECT id FROM user_data WHERE alias='f02'),
|
|
f03 AS (SELECT id FROM user_data WHERE alias='f03'),
|
|
f04 AS (SELECT id FROM user_data WHERE alias='f04'),
|
|
f05 AS (SELECT id FROM user_data WHERE alias='f05'),
|
|
f06 AS (SELECT id FROM user_data WHERE alias='f06'),
|
|
m01 AS (SELECT id FROM user_data WHERE alias='m01'),
|
|
m02 AS (SELECT id FROM user_data WHERE alias='m02'),
|
|
m03 AS (SELECT id FROM user_data WHERE alias='m03'),
|
|
m04 AS (SELECT id FROM user_data WHERE alias='m04'),
|
|
m05 AS (SELECT id FROM user_data WHERE alias='m05'),
|
|
m06 AS (SELECT id FROM user_data WHERE alias='m06')
|
|
INSERT INTO user_relations (id, user_id, target_user_id, relation_type, created_at)
|
|
VALUES
|
|
(gen_random_uuid(), (SELECT id FROM f01), (SELECT id FROM m01), 'liked', '2026-06-01T10:00:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM m01), (SELECT id FROM f01), 'liked', '2026-06-01T10:05:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM f02), (SELECT id FROM m02), 'liked', '2026-06-02T14:00:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM f03), (SELECT id FROM m03), 'liked', '2026-06-03T09:00:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM m03), (SELECT id FROM f03), 'liked', '2026-06-03T09:30:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM m04), (SELECT id FROM f02), 'liked', '2026-06-04T11:00:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM f04), (SELECT id FROM m04), 'passed', '2026-06-04T12:00:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM f05), (SELECT id FROM m05), 'liked', '2026-06-05T10:00:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM m05), (SELECT id FROM f05), 'liked', '2026-06-05T10:05:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM m06), (SELECT id FROM f01), 'liked', '2026-06-06T14:00:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM f04), (SELECT id FROM m06), 'passed', '2026-06-06T15:00:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM f06), (SELECT id FROM m04), 'blocked', '2026-06-07T09:00:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM m02), (SELECT id FROM f03), 'passed', '2026-06-07T10:00:00Z');
|
|
|
|
-- ============================================================
|
|
-- 6. Match
|
|
-- ====================================================
|
|
WITH f01 AS (SELECT id FROM user_data WHERE alias='f01'),
|
|
f03 AS (SELECT id FROM user_data WHERE alias='f03'),
|
|
f05 AS (SELECT id FROM user_data WHERE alias='f05'),
|
|
m01 AS (SELECT id FROM user_data WHERE alias='m01'),
|
|
m03 AS (SELECT id FROM user_data WHERE alias='m03'),
|
|
m05 AS (SELECT id FROM user_data WHERE alias='m05')
|
|
INSERT INTO matches (id, user_a_id, user_b_id, status, source, matched_at)
|
|
VALUES
|
|
(gen_random_uuid(), (SELECT id FROM f01), (SELECT id FROM m01), 'active', 'user_like', '2026-06-01T10:05:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM f03), (SELECT id FROM m03), 'active', 'user_like', '2026-06-03T09:30:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM f05), (SELECT id FROM m05), 'successful', 'user_like', '2026-06-05T10:05:00Z');
|
|
|
|
-- ============================================================
|
|
-- 7. 成功牵手请求
|
|
-- ====================================================
|
|
WITH match_success AS (SELECT id FROM matches WHERE status='successful' LIMIT 1),
|
|
match_active AS (SELECT id FROM matches WHERE status='active' ORDER BY created_at LIMIT 1),
|
|
f01 AS (SELECT id FROM user_data WHERE alias='f01'),
|
|
m05 AS (SELECT id FROM user_data WHERE alias='m05'),
|
|
f05 AS (SELECT id FROM user_data WHERE alias='f05')
|
|
INSERT INTO relationship_success_requests (id, match_id, initiated_by, status, confirmed_by, created_at, resolved_at)
|
|
VALUES
|
|
(gen_random_uuid(), (SELECT id FROM match_success), (SELECT id FROM f05), 'confirmed', (SELECT id FROM m05), '2026-07-01T10:00:00Z', '2026-07-01T10:30:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM match_active), (SELECT id FROM f01), 'pending', NULL, '2026-07-15T14:00:00Z', NULL);
|
|
|
|
-- ============================================================
|
|
-- 8. Conversations & Messages
|
|
-- ====================================================
|
|
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_result;
|
|
|
|
-- members
|
|
WITH _match_pairs AS (
|
|
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
|
|
UNION ALL
|
|
SELECT (SELECT id FROM _conv_result WHERE match_id=(SELECT match_id FROM _match_pairs WHERE user_b_id=up.user_b_id LIMIT 1)), up.user_b_id, 0, true, NOW() FROM _match_pairs up;
|
|
|
|
-- messages
|
|
INSERT INTO messages (id, conversation_id, sender_id, message_type, content, status, risk_level, created_at)
|
|
VALUES
|
|
(gen_random_uuid(), (SELECT id FROM conversations ORDER BY created_at LIMIT 1), (SELECT id FROM user_data WHERE alias='f01'), 'text', '你好!看到你的资料觉得挺合适的~', 'sent', 'normal', '2026-06-15T14:00:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM conversations ORDER BY created_at LIMIT 1), (SELECT id FROM user_data WHERE alias='m01'), 'text', '你好!谢谢你的喜欢,我也觉得挺有缘的', 'sent', 'normal', '2026-06-15T14:05:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM conversations ORDER BY created_at LIMIT 1), (SELECT id FROM user_data WHERE alias='f01'), 'text', '你也在丹阳工作吗?平时喜欢做些什么?', 'sent', 'normal', '2026-06-15T14:10:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM conversations ORDER BY created_at OFFSET 1 LIMIT 1), (SELECT id FROM user_data WHERE alias='m03'), 'text', '嗨,你好!很高兴认识你', 'sent', 'normal', '2026-07-05T19:30:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM conversations ORDER BY created_at OFFSET 1 LIMIT 1), (SELECT id FROM user_data WHERE alias='f03'), 'text', '你好呀!我平时喜欢拍照和跳舞,你呢?', 'sent', 'normal', '2026-07-05T19:35:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM conversations ORDER BY created_at OFFSET 2 LIMIT 1), (SELECT id FROM user_data WHERE alias='m05'), 'text', '你好,很高兴认识你!', 'sent', 'normal', '2026-06-10T10:00:00Z');
|
|
|
|
-- update last_message_at
|
|
UPDATE conversations SET last_message_at = (SELECT MAX(created_at) FROM messages WHERE messages.conversation_id = conversations.id);
|
|
|
|
-- ============================================================
|
|
-- 9. 推荐记录
|
|
-- ====================================================
|
|
WITH f01 AS (SELECT id FROM user_data WHERE alias='f01'), f03 AS (SELECT id FROM user_data WHERE alias='f03'),
|
|
f05 AS (SELECT id FROM user_data WHERE alias='f05'),
|
|
m01 AS (SELECT id FROM user_data WHERE alias='m01'), m03 AS (SELECT id FROM user_data WHERE alias='m03'),
|
|
m05 AS (SELECT id FROM user_data WHERE alias='m05'), m06 AS (SELECT id FROM user_data WHERE alias='m06')
|
|
INSERT INTO recommendation_records (id, user_id, target_user_id, source, score, level, shown_at, action, action_at, rule_version)
|
|
VALUES
|
|
(gen_random_uuid(), (SELECT id FROM f01), (SELECT id FROM m01), 'daily', 82.50, 'high', '2026-05-28T10:00:00Z', 'liked', '2026-06-01T10:00:00Z', 1),
|
|
(gen_random_uuid(), (SELECT id FROM f01), (SELECT id FROM m03), 'daily', 70.00, 'medium', '2026-05-28T10:00:00Z', 'passed','2026-05-28T10:01:00Z', 1),
|
|
(gen_random_uuid(), (SELECT id FROM m01), (SELECT id FROM f01), 'daily', 85.00, 'high', '2026-05-28T11:00:00Z', 'liked', '2026-06-01T10:05:00Z', 1),
|
|
(gen_random_uuid(), (SELECT id FROM f03), (SELECT id FROM m03), 'daily', 78.00, 'high', '2026-06-01T09:00:00Z', 'liked', '2026-06-03T09:30:00Z', 1),
|
|
(gen_random_uuid(), (SELECT id FROM m03), (SELECT id FROM f03), 'daily', 75.00, 'high', '2026-06-01T09:30:00Z', 'liked', '2026-06-03T09:30:00Z', 1),
|
|
(gen_random_uuid(), (SELECT id FROM f05), (SELECT id FROM m05), 'daily', 88.00, 'high', '2026-06-01T10:00:00Z', 'liked', '2026-06-05T10:00:00Z', 1),
|
|
(gen_random_uuid(), (SELECT id FROM m05), (SELECT id FROM f05), 'daily', 86.00, 'high', '2026-06-01T10:30:00Z', 'liked', '2026-06-05T10:05:00Z', 1),
|
|
(gen_random_uuid(), (SELECT id FROM m06), (SELECT id FROM f01), 'daily', 62.00, 'medium','2026-06-06T14:00:00Z', 'liked', '2026-06-06T14:00:00Z', 1);
|
|
|
|
-- ============================================================
|
|
-- 10. 相亲活动
|
|
-- ====================================================
|
|
WITH women_org AS (SELECT id FROM organizations WHERE type='women_federation' LIMIT 1),
|
|
trade_org AS (SELECT id FROM organizations WHERE type='trade_union' LIMIT 1),
|
|
mgr AS (SELECT id FROM operators WHERE username='activitymgr' LIMIT 1)
|
|
INSERT INTO activities (id, title, display_id, description, organizer_org_id, coorganizer_text,
|
|
start_at, end_at, location_name, location_address,
|
|
male_limit, female_limit, total_limit, min_age, max_age,
|
|
registration_start_at, registration_end_at, need_review, status, created_by)
|
|
VALUES
|
|
(gen_random_uuid(), '丹阳公益单身联谊会(夏季场)', 'HD20261019001',
|
|
'面向丹阳市区及周边乡镇的单身青年,由妇联、工会联合主办。',
|
|
(SELECT id FROM women_org), '丹阳市总工会、丹阳市慈善基金会',
|
|
'2026-08-15T14:00:00Z', '2026-08-15T17:30:00Z', '丹阳市文化馆多功能厅', '丹阳市丹北路168号',
|
|
15, 15, 30, 22, 40, '2026-07-01T00:00:00Z', '2026-08-10T23:59:59Z', true, 'registration_open', (SELECT id FROM mgr)),
|
|
(gen_random_uuid(), '七夕特别活动·丹阳缘来是你', 'HD20261019002',
|
|
'七夕节特别策划,浪漫主题相亲活动。',
|
|
(SELECT id FROM trade_org), '丹阳市新时代文明实践中心',
|
|
'2026-08-29T15:00:00Z', '2026-08-29T18:00:00Z', '丹阳大剧院报告厅', '丹阳市书院路28号',
|
|
20, 20, 40, 25, 45, '2026-08-01T00:00:00Z', '2026-08-25T23:59:59Z', true, 'draft', (SELECT id FROM mgr));
|
|
|
|
-- ============================================================
|
|
-- 11. 活动报名
|
|
-- ====================================================
|
|
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,
|
|
CASE ud.alias WHEN 'f01' THEN 'approved' WHEN 'f02' THEN 'pending' WHEN 'f03' THEN 'approved'
|
|
WHEN 'f04' THEN 'rejected' WHEN 'f05' THEN 'approved' WHEN 'm01' THEN 'approved'
|
|
WHEN 'm02' THEN 'approved' WHEN 'm03' THEN 'approved' WHEN 'm05' THEN 'approved' END,
|
|
NOW()-INTERVAL '30 days',
|
|
CASE WHEN ud.alias='f02' THEN NULL ELSE (SELECT id FROM mgr2) END,
|
|
CASE WHEN ud.alias='f02' THEN NULL ELSE NOW()-INTERVAL '29 days' END,
|
|
'not_checked_in'
|
|
FROM user_data ud WHERE ud.alias IN ('f01','f02','f03','f04','f05','m01','m02','m03','m05');
|
|
|
|
-- ============================================================
|
|
-- 12. 活动互选意向
|
|
-- ====================================================
|
|
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'::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'::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'::timestamptz, '2026-08-15T17:10:00Z'::timestamptz;
|
|
|
|
-- ============================================================
|
|
-- 13. 红娘服务
|
|
-- ====================================================
|
|
WITH mh_op AS (SELECT id FROM operators WHERE username='wanghongniang' LIMIT 1),
|
|
women_org AS (SELECT id FROM organizations WHERE type='women_federation' LIMIT 1),
|
|
charity_org AS (SELECT id FROM organizations WHERE type='charity_center' LIMIT 1)
|
|
INSERT INTO matchmaker_services (id, user_id, service_type, description, status, organization_id, assigned_operator_id, assigned_at, completed_at)
|
|
VALUES
|
|
(gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f02'), 'recommend_partner', '离异用户希望找到合适的伴侣', 'in_service', (SELECT id FROM women_org), (SELECT id FROM mh_op), '2026-06-20T10:00:00Z', NULL),
|
|
(gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f06'), 'no_match_help', '丧偶用户希望重新融入社交', 'waiting_user', (SELECT id FROM charity_org), (SELECT id FROM mh_op), '2026-06-25T14:00:00Z', NULL),
|
|
(gen_random_uuid(), (SELECT id FROM user_data WHERE alias='f04'), 'review_preference', '用户希望调整择偶条件', 'completed', (SELECT id FROM women_org), (SELECT id FROM mh_op), '2026-06-15T09:00:00Z', '2026-06-20T11:00:00Z');
|
|
|
|
-- 红娘推荐
|
|
WITH ms_f02 AS (SELECT id FROM matchmaker_services WHERE user_id=(SELECT id FROM user_data WHERE alias='f02') LIMIT 1),
|
|
mh_op2 AS (SELECT id FROM operators WHERE username='wanghongniang' LIMIT 1)
|
|
INSERT INTO matchmaker_recommendations (id, service_id, user_id, target_user_id, operator_id, reason, status, created_at, viewed_at, responded_at)
|
|
VALUES (gen_random_uuid(), (SELECT id FROM ms_f02), (SELECT id FROM user_data WHERE alias='f02'), (SELECT id FROM user_data WHERE alias='m02'), (SELECT id FROM mh_op2),
|
|
'两人同在丹阳工作,年龄相仿,都离过婚有共同语言', 'viewed', '2026-06-21T10:00:00Z', '2026-06-22T09:00:00Z', NULL);
|
|
|
|
-- 红娘跟进
|
|
WITH ms_f02_2 AS (SELECT id FROM matchmaker_services WHERE user_id=(SELECT id FROM user_data WHERE alias='f02') LIMIT 1),
|
|
ms_f04 AS (SELECT id FROM matchmaker_services WHERE user_id=(SELECT id FROM user_data WHERE alias='f04') LIMIT 1),
|
|
mh_op3 AS (SELECT id FROM operators WHERE username='wanghongniang' LIMIT 1)
|
|
INSERT INTO matchmaker_followups (id, service_id, operator_id, followup_type, content, result_code, next_followup_at, created_at)
|
|
VALUES
|
|
(gen_random_uuid(), (SELECT id FROM ms_f02_2), (SELECT id FROM mh_op3), 'phone_call', '电话沟通用户情况,了解离异原因及择偶期望', '正常', '2026-07-01T10:00:00Z', '2026-06-22T10:00:00Z'),
|
|
(gen_random_uuid(), (SELECT id FROM ms_f04), (SELECT id FROM mh_op3), 'face_to_face','面对面交流,帮助用户调整身高要求', '已调整', NULL, '2026-06-18T15:00:00Z');
|
|
|
|
-- ============================================================
|
|
-- 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'::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'::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. 审核原因字典
|
|
-- ====================================================
|
|
INSERT INTO review_reasons (code, name, category, enabled, sort_order)
|
|
VALUES
|
|
('profile_incomplete', '资料不完整', 'quality', true, 1),
|
|
('photo_unclear', '照片不清晰', 'quality', true, 2),
|
|
('fake_info', '信息疑似虚假', 'trust', true, 3),
|
|
('inappropriate_photo', '照片内容不当', 'safety', true, 4),
|
|
('duplicate_identity', '重复注册', 'duplicate', true, 5),
|
|
('suspicious_behavior', '行为异常', 'risk', true, 6),
|
|
('manual_review_needed', '需人工复核', 'quality', true, 7)
|
|
ON CONFLICT (code) DO NOTHING;
|
|
|
|
DROP TABLE IF EXISTS _conv_result;
|
|
|
|
-- ============================================================
|
|
-- V1.1 Feature Flag 初始化
|
|
-- ============================================================
|
|
INSERT INTO system_configs (config_key, config_value, description) VALUES
|
|
('localEligibility.evidencePolicy', '"need_based"', '本地资格佐证策略:need_based=按需触发 / mandatory=全部强制'),
|
|
('counseling.enabled', 'true', '婚恋咨询功能开关'),
|
|
('premarital.enabled', 'true', '婚前辅导功能开关'),
|
|
('serviceLocation.enabled', 'true', '善缘服务站功能开关'),
|
|
('content.enabled', 'true', '内容中心功能开关'),
|
|
('localEligibility.enabled', 'true', '本地资格功能开关'),
|
|
('banner.maxActiveCount', '5', 'Banner最大活跃数量')
|
|
ON CONFLICT (config_key) DO NOTHING;
|
|
|
|
-- ============================================================
|
|
-- 验证
|
|
-- ====================================================
|
|
DO $$
|
|
DECLARE
|
|
u_cnt INTEGER; op_cnt INTEGER; m_cnt INTEGER; a_cnt INTEGER; r_cnt INTEGER; n_cnt INTEGER; p_cnt INTEGER;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO u_cnt FROM users WHERE deleted_at IS NULL;
|
|
SELECT COUNT(*) INTO op_cnt FROM operators;
|
|
SELECT COUNT(*) INTO m_cnt FROM matches;
|
|
SELECT COUNT(*) INTO a_cnt FROM activities WHERE deleted_at IS NULL;
|
|
SELECT COUNT(*) INTO r_cnt FROM user_relations;
|
|
SELECT COUNT(*) INTO n_cnt FROM notifications;
|
|
SELECT COUNT(*) INTO p_cnt FROM user_profiles;
|
|
RAISE NOTICE '========================================';
|
|
RAISE NOTICE '✅ Demo 数据填充完成!';
|
|
RAISE NOTICE '========================================';
|
|
RAISE NOTICE ' 用户: %人 | 资料: %条 | 操作员: %人', u_cnt, p_cnt, op_cnt;
|
|
RAISE NOTICE ' Match: %对 | 关系: %条 | 活动: %个 | 通知: %条', m_cnt, r_cnt, a_cnt, n_cnt;
|
|
RAISE NOTICE '========================================';
|
|
END $$;
|
|
|
|
COMMIT;
|