51 lines
1.8 KiB
SQL
51 lines
1.8 KiB
SQL
-- 入口模块地区管理 - 常用操作
|
||
|
||
-- 查看所有配置
|
||
SELECT id, name, jsonb_pretty(areas) AS configs FROM entry_modules;
|
||
|
||
-- 禁用某个入口在某个地区(示例:禁用id=1在"云浮")
|
||
UPDATE entry_modules
|
||
SET areas = (
|
||
SELECT jsonb_agg(CASE WHEN elem->>'area' = '云浮'
|
||
THEN jsonb_set(elem, '{enabled}', 'false'::jsonb) ELSE elem END)
|
||
FROM jsonb_array_elements(areas) AS elem
|
||
), updated_at = NOW()
|
||
WHERE id = 1;
|
||
|
||
-- 启用某个入口在某个地区(示例:启用id=1在"云浮")
|
||
UPDATE entry_modules
|
||
SET areas = (
|
||
SELECT jsonb_agg(CASE WHEN elem->>'area' = '云浮'
|
||
THEN jsonb_set(elem, '{enabled}', 'true'::jsonb) ELSE elem END)
|
||
FROM jsonb_array_elements(areas) AS elem
|
||
), updated_at = NOW()
|
||
WHERE id = 1;
|
||
|
||
-- 添加新地区(示例:为id=1添加"揭阳")
|
||
UPDATE entry_modules
|
||
SET areas = areas || jsonb_build_array(
|
||
jsonb_build_object('area', '揭阳', 'enabled', true, 'sort_order',
|
||
(SELECT COALESCE(MAX((elem->>'sort_order')::int), 0) + 1
|
||
FROM jsonb_array_elements(areas) AS elem))
|
||
), updated_at = NOW()
|
||
WHERE id = 1 AND NOT EXISTS (
|
||
SELECT 1 FROM jsonb_array_elements(areas) AS elem WHERE elem->>'area' = '揭阳'
|
||
);
|
||
|
||
-- 删除某个地区配置(示例:从id=1删除"云浮")
|
||
UPDATE entry_modules
|
||
SET areas = (SELECT jsonb_agg(elem) FROM jsonb_array_elements(areas) AS elem
|
||
WHERE elem->>'area' != '云浮'
|
||
), updated_at = NOW()
|
||
WHERE id = 1;
|
||
|
||
-- 查看某个地区已启用的模块(示例:查看"梅州")
|
||
SELECT id, name FROM entry_modules
|
||
WHERE areas @> '[{"area": "梅州", "enabled": true}]'::jsonb;
|
||
|
||
-- 统计每个地区的已启用模块数量
|
||
SELECT elem->>'area' AS area, COUNT(*) AS count
|
||
FROM entry_modules, jsonb_array_elements(areas) AS elem
|
||
WHERE (elem->>'enabled')::boolean = true
|
||
GROUP BY elem->>'area';
|