Some checks failed
Deploy Production / Build, push, deploy, verify (push) Has been cancelled
- 移除已迁移业务 AppData 运行时 fallback,改走领域 API 和关系表快读 - 补齐需求产品负责人、版本计划任务 JSON 和成员 username 回填迁移 - 统一治理字典入口,并补充 AI provider、数据源契约和领域服务测试 Co-Authored-By: Codex GPT-5 <codex@openai.com>
49 lines
1.4 KiB
SQL
49 lines
1.4 KiB
SQL
WITH raw_members AS (
|
|
SELECT member
|
|
FROM app_data
|
|
CROSS JOIN LATERAL jsonb_array_elements(
|
|
CASE
|
|
WHEN jsonb_typeof(value -> 'members') = 'array' THEN value -> 'members'
|
|
ELSE '[]'::jsonb
|
|
END
|
|
) AS member
|
|
WHERE key = 'members'
|
|
),
|
|
members AS (
|
|
SELECT
|
|
NULLIF(member ->> 'id', '') AS id,
|
|
NULLIF(member ->> 'username', '') AS username,
|
|
NULLIF(member ->> 'departmentId', '') AS department_id,
|
|
NULLIF(member ->> 'roleId', '') AS role_id,
|
|
COALESCE(member ->> 'phone', '') AS phone,
|
|
COALESCE(member ->> 'password', '') AS password,
|
|
CASE
|
|
WHEN jsonb_typeof(member -> 'isSystem') = 'boolean' THEN (member ->> 'isSystem')::boolean
|
|
ELSE NULL
|
|
END AS is_system,
|
|
COUNT(*) OVER (PARTITION BY NULLIF(member ->> 'username', '')) AS username_count
|
|
FROM raw_members
|
|
)
|
|
UPDATE users AS u
|
|
SET
|
|
username = CASE
|
|
WHEN NULLIF(u.username, '') IS NULL
|
|
AND m.username IS NOT NULL
|
|
AND m.username_count = 1
|
|
AND NOT EXISTS (
|
|
SELECT 1
|
|
FROM users AS other_user
|
|
WHERE other_user.id <> u.id
|
|
AND other_user.username = m.username
|
|
)
|
|
THEN m.username
|
|
ELSE u.username
|
|
END,
|
|
department_id = COALESCE(m.department_id, u.department_id),
|
|
role_id = COALESCE(m.role_id, u.role_id, 'member'),
|
|
phone = COALESCE(m.phone, u.phone, ''),
|
|
password = COALESCE(m.password, u.password, ''),
|
|
is_system = COALESCE(m.is_system, u.is_system, false)
|
|
FROM members AS m
|
|
WHERE u.id = m.id;
|