imetting/backend/sql/migrations/upgrade_prompt_library_and_...

104 lines
3.1 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';
-- Keep existing role-menu permissions unchanged.
-- This migration only creates/adjusts menu definitions.
COMMIT;