114 lines
3.5 KiB
PL/PgSQL
114 lines
3.5 KiB
PL/PgSQL
-- Migration: prompt library upgrade + user prompt config + menu regroup
|
|
-- Created at: 2026-03-13
|
|
|
|
BEGIN;
|
|
|
|
-- 1) prompts table: support system prompt library
|
|
SET @add_is_system_sql = (
|
|
SELECT IF(
|
|
EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_schema = DATABASE() AND table_name = 'prompts' AND column_name = 'is_system'
|
|
),
|
|
'SELECT 1',
|
|
'ALTER TABLE prompts ADD COLUMN is_system TINYINT(1) NOT NULL DEFAULT 0 AFTER creator_id'
|
|
)
|
|
);
|
|
PREPARE stmt FROM @add_is_system_sql;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
SET @add_prompts_idx_sql = (
|
|
SELECT IF(
|
|
EXISTS (
|
|
SELECT 1
|
|
FROM information_schema.statistics
|
|
WHERE table_schema = DATABASE()
|
|
AND table_name = 'prompts'
|
|
AND index_name = 'idx_prompts_task_scope_active'
|
|
),
|
|
'SELECT 1',
|
|
'CREATE INDEX idx_prompts_task_scope_active ON prompts (task_type, is_system, creator_id, is_active, is_default)'
|
|
)
|
|
);
|
|
PREPARE stmt FROM @add_prompts_idx_sql;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
-- Existing admin-created prompts become system prompts by default
|
|
UPDATE prompts
|
|
SET is_system = 1
|
|
WHERE creator_id = 1;
|
|
|
|
-- 2) user prompt config table
|
|
CREATE TABLE IF NOT EXISTS prompt_config (
|
|
config_id BIGINT(20) NOT NULL AUTO_INCREMENT,
|
|
user_id INT(11) NOT NULL,
|
|
task_type ENUM('MEETING_TASK','KNOWLEDGE_TASK') NOT NULL,
|
|
prompt_id INT(11) NOT NULL,
|
|
is_enabled TINYINT(1) NOT NULL DEFAULT 1,
|
|
sort_order INT(11) NOT NULL DEFAULT 0,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (config_id),
|
|
UNIQUE KEY uk_user_task_prompt (user_id, task_type, prompt_id),
|
|
KEY idx_user_task_order (user_id, task_type, sort_order),
|
|
KEY idx_prompt_id (prompt_id),
|
|
CONSTRAINT fk_upc_user FOREIGN KEY (user_id) REFERENCES sys_users(user_id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_upc_prompt FOREIGN KEY (prompt_id) REFERENCES prompts(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- 3) Menu regroup:
|
|
-- move prompt_management under platform_admin (2nd level)
|
|
UPDATE sys_menus child
|
|
JOIN sys_menus parent ON parent.menu_code = 'platform_admin'
|
|
SET child.parent_id = parent.menu_id,
|
|
child.sort_order = 8,
|
|
child.menu_level = 2,
|
|
child.tree_path = CONCAT(parent.tree_path, '/', child.menu_id)
|
|
WHERE child.menu_code = 'prompt_management';
|
|
|
|
-- add prompt_config entry
|
|
INSERT INTO sys_menus
|
|
(
|
|
menu_code, menu_name, menu_icon, menu_url, menu_type,
|
|
parent_id, menu_level, tree_path, sort_order, is_active, is_visible, description
|
|
)
|
|
SELECT
|
|
'prompt_config',
|
|
'提示词配置',
|
|
'Book',
|
|
'/prompt-config',
|
|
'link',
|
|
p.menu_id,
|
|
2,
|
|
NULL,
|
|
9,
|
|
1,
|
|
1,
|
|
'用户可配置启用提示词与排序'
|
|
FROM sys_menus p
|
|
WHERE p.menu_code = 'platform_admin'
|
|
AND NOT EXISTS (SELECT 1 FROM sys_menus WHERE menu_code = 'prompt_config');
|
|
|
|
UPDATE sys_menus c
|
|
JOIN sys_menus p ON c.parent_id = p.menu_id
|
|
SET c.menu_level = p.menu_level + 1,
|
|
c.tree_path = CONCAT(p.tree_path, '/', c.menu_id)
|
|
WHERE c.menu_code = 'prompt_config';
|
|
|
|
-- permissions:
|
|
-- admin gets both
|
|
INSERT IGNORE INTO sys_role_menu_permissions (role_id, menu_id)
|
|
SELECT 1, m.menu_id
|
|
FROM sys_menus m
|
|
WHERE m.menu_code IN ('platform_admin', 'prompt_management', 'prompt_config');
|
|
|
|
-- normal user gets platform_admin + prompt_management + prompt_config
|
|
INSERT IGNORE INTO sys_role_menu_permissions (role_id, menu_id)
|
|
SELECT 2, m.menu_id
|
|
FROM sys_menus m
|
|
WHERE m.menu_code IN ('platform_admin', 'prompt_management', 'prompt_config');
|
|
|
|
COMMIT;
|