690525:1320 ADR-028-228-migration #06
CI / CD Pipeline / build (push) Successful in 4m18s
CI / CD Pipeline / deploy (push) Successful in 7m41s

This commit is contained in:
2026-05-25 13:20:17 +07:00
parent dcd1a9855e
commit 001237ea35
18 changed files with 967 additions and 128 deletions
@@ -0,0 +1,8 @@
-- Rollback: Drop ai_available_models table
-- Date: 2026-05-25
-- Remove system setting first
DELETE FROM system_settings WHERE setting_key = 'AI_ACTIVE_MODEL';
-- Drop table
DROP TABLE IF EXISTS ai_available_models;
@@ -0,0 +1,43 @@
-- Delta: Create ai_available_models table for dynamic AI model selection
-- Date: 2026-05-25
-- Author: AI Assistant
-- Related: ADR-027 AI Admin Console - Dynamic model control
-- Create table for available AI models
CREATE TABLE IF NOT EXISTS ai_available_models (
id INT AUTO_INCREMENT PRIMARY KEY,
model_name VARCHAR(100) NOT NULL COMMENT 'ชื่อโมเดล เช่น gemma4:e2b, gemma4:e4b',
model_version VARCHAR(50) NOT NULL COMMENT 'เวอร์ชั่นของโมเดล',
description VARCHAR(500) NULL COMMENT 'รายละเอียดโมเดล',
vram_gb DECIMAL(4,2) NULL COMMENT 'VRAM ที่ใช้โดยประมาณ (GB)',
is_active BOOLEAN DEFAULT TRUE COMMENT 'สถานะใช้งาน',
is_default BOOLEAN DEFAULT FALSE COMMENT 'โมเดลเริ่มต้น',
created_by INT NULL,
updated_by INT NULL,
created_at DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
deleted_at DATETIME(3) NULL,
UNIQUE KEY uk_model_name (model_name),
INDEX idx_is_active (is_active),
INDEX idx_is_default (is_default)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='ตารางเก็บรายการโมเดล AI ที่ให้เลือกใช้งานในระบบ (ADR-027)';
-- Insert default models per ADR-023A
INSERT INTO ai_available_models (model_name, model_version, description, vram_gb, is_active, is_default) VALUES
('gemma4:e2b', 'e2b', 'Gemma 4 E2B - 2-bit quantized, ~2GB VRAM, recommended per ADR-023A', 2.00, TRUE, TRUE),
('gemma4:e4b', 'e4b', 'Gemma 4 E4B - 4-bit quantized, ~4GB VRAM', 4.00, TRUE, FALSE);
-- Add system setting for active model (reference to ai_available_models)
INSERT INTO system_settings (setting_key, setting_value, data_type, category, description, is_public, created_at, updated_at)
SELECT
'AI_ACTIVE_MODEL',
(SELECT model_name FROM ai_available_models WHERE is_default = TRUE LIMIT 1),
'string',
'ai',
'โมเดล AI ที่ใช้งานอยู่ในระบบ (global)',
TRUE,
CURRENT_TIMESTAMP(3),
CURRENT_TIMESTAMP(3)
WHERE NOT EXISTS (SELECT 1 FROM system_settings WHERE setting_key = 'AI_ACTIVE_MODEL');
@@ -0,0 +1,15 @@
-- File: specs/03-Data-and-Storage/deltas/2026-05-25-grant-ai-permissions-to-superadmin.rollback.sql
-- Change Log:
-- - 2026-05-25: Rollback — ลบ ai.* permissions ออกจาก role_id=1 (Superadmin)
-- ==========================================================
DELETE rp FROM role_permissions rp
JOIN permissions p ON rp.permission_id = p.permission_id
WHERE rp.role_id = 1
AND p.permission_name IN (
'ai.suggest',
'ai.rag_query',
'ai.migration_manage',
'ai.audit_log_delete',
'ai.read_analytics',
'ai.delete_audit'
);
@@ -0,0 +1,23 @@
-- File: specs/03-Data-and-Storage/deltas/2026-05-25-grant-ai-permissions-to-superadmin.sql
-- Change Log:
-- - 2026-05-25: Grant ai.* permissions ให้ Superadmin (role_id=1) ที่ขาดหายไปจาก seed
-- ==========================================================
-- Root Cause:
-- Seed script (lcbp3-v1.9.0-seed-permissions.sql) รัน:
-- INSERT INTO role_permissions SELECT 1, permission_id FROM permissions WHERE is_active = 1
-- ก่อนที่ ai.* permissions (permission_id 181-186) จะถูก INSERT เข้า permissions table
-- ทำให้ role_id=1 (Superadmin) ไม่มี ai.* ใน role_permissions
-- ผลกระทบ: migration_bot (user_id=5, role_id=1) ถูก RbacGuard block ที่ POST /api/ai/jobs
-- ==========================================================
INSERT IGNORE INTO role_permissions (role_id, permission_id)
SELECT 1, permission_id
FROM permissions
WHERE permission_name IN (
'ai.suggest',
'ai.rag_query',
'ai.migration_manage',
'ai.audit_log_delete',
'ai.read_analytics',
'ai.delete_audit'
)
AND is_active = 1;