改用API驗證
This commit is contained in:
160
migrations/create_fresh_schema.sql
Normal file
160
migrations/create_fresh_schema.sql
Normal file
@@ -0,0 +1,160 @@
|
||||
-- 全新的文件翻譯系統資料庫架構
|
||||
-- 方案 A: dt_users 用於業務功能,sys_user 用於登入記錄
|
||||
-- API name 格式: 姓名+email,email 作為主要識別鍵
|
||||
-- Created: 2025-10-01
|
||||
|
||||
-- 1. 建立 dt_users 表 (業務功能使用)
|
||||
CREATE TABLE dt_users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(255) NOT NULL COMMENT 'API name (姓名+email格式)',
|
||||
display_name VARCHAR(255) NOT NULL COMMENT 'API name (姓名+email格式)',
|
||||
email VARCHAR(255) NOT NULL UNIQUE COMMENT '電子郵件 (主要識別鍵)',
|
||||
department VARCHAR(100) COMMENT '部門/職位',
|
||||
is_admin BOOLEAN DEFAULT FALSE COMMENT '是否為管理員',
|
||||
last_login DATETIME COMMENT '最後登入時間',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
|
||||
|
||||
INDEX idx_email (email),
|
||||
INDEX idx_username_email (username, email)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='使用者資訊表';
|
||||
|
||||
-- 2. 建立 dt_translation_jobs 表 (翻譯工作)
|
||||
CREATE TABLE dt_translation_jobs (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT NOT NULL COMMENT '關聯到 dt_users.id',
|
||||
job_name VARCHAR(255) NOT NULL COMMENT '工作名稱',
|
||||
source_lang VARCHAR(10) NOT NULL COMMENT '來源語言',
|
||||
target_lang VARCHAR(10) NOT NULL COMMENT '目標語言',
|
||||
file_type ENUM('DOCX', 'PPTX', 'PDF', 'TXT') NOT NULL COMMENT '檔案類型',
|
||||
status ENUM('PENDING', 'PROCESSING', 'COMPLETED', 'FAILED') DEFAULT 'PENDING' COMMENT '工作狀態',
|
||||
progress INT DEFAULT 0 COMMENT '進度百分比',
|
||||
total_pages INT DEFAULT 0 COMMENT '總頁數',
|
||||
processed_pages INT DEFAULT 0 COMMENT '已處理頁數',
|
||||
cost DECIMAL(10,4) DEFAULT 0 COMMENT '翻譯成本',
|
||||
error_message TEXT COMMENT '錯誤訊息',
|
||||
conversation_id VARCHAR(255) COMMENT 'Dify 對話 ID',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
|
||||
completed_at DATETIME COMMENT '完成時間',
|
||||
|
||||
FOREIGN KEY (user_id) REFERENCES dt_users(id) ON DELETE CASCADE,
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='翻譯工作表';
|
||||
|
||||
-- 3. 建立 dt_job_files 表 (工作檔案)
|
||||
CREATE TABLE dt_job_files (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
job_id BIGINT NOT NULL COMMENT '關聯到 dt_translation_jobs.id',
|
||||
file_type ENUM('source', 'translated') NOT NULL COMMENT '檔案類型',
|
||||
original_filename VARCHAR(255) NOT NULL COMMENT '原始檔名',
|
||||
stored_filename VARCHAR(255) NOT NULL COMMENT '儲存檔名',
|
||||
file_path VARCHAR(500) NOT NULL COMMENT '檔案路徑',
|
||||
file_size BIGINT DEFAULT 0 COMMENT '檔案大小',
|
||||
mime_type VARCHAR(100) COMMENT 'MIME 類型',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
|
||||
|
||||
FOREIGN KEY (job_id) REFERENCES dt_translation_jobs(id) ON DELETE CASCADE,
|
||||
INDEX idx_job_id (job_id),
|
||||
INDEX idx_file_type (file_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作檔案表';
|
||||
|
||||
-- 4. 建立 dt_translation_cache 表 (翻譯快取)
|
||||
CREATE TABLE dt_translation_cache (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
content_hash VARCHAR(64) NOT NULL COMMENT '內容雜湊',
|
||||
source_lang VARCHAR(10) NOT NULL COMMENT '來源語言',
|
||||
target_lang VARCHAR(10) NOT NULL COMMENT '目標語言',
|
||||
source_text TEXT NOT NULL COMMENT '來源文字',
|
||||
translated_text TEXT NOT NULL COMMENT '翻譯文字',
|
||||
quality_score DECIMAL(3,2) DEFAULT 0.00 COMMENT '品質分數',
|
||||
hit_count INT DEFAULT 0 COMMENT '命中次數',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
|
||||
last_used_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後使用時間',
|
||||
|
||||
UNIQUE KEY uk_content_lang (content_hash, source_lang, target_lang),
|
||||
INDEX idx_last_used (last_used_at),
|
||||
INDEX idx_hit_count (hit_count)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='翻譯快取表';
|
||||
|
||||
-- 5. 建立 dt_api_usage_stats 表 (API 使用統計)
|
||||
CREATE TABLE dt_api_usage_stats (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT NOT NULL COMMENT '關聯到 dt_users.id',
|
||||
job_id BIGINT COMMENT '關聯到 dt_translation_jobs.id',
|
||||
api_name VARCHAR(50) NOT NULL COMMENT 'API 名稱',
|
||||
request_count INT DEFAULT 1 COMMENT '請求次數',
|
||||
token_used INT DEFAULT 0 COMMENT '使用的 token 數',
|
||||
cost DECIMAL(10,4) DEFAULT 0 COMMENT '成本',
|
||||
response_time_ms INT DEFAULT 0 COMMENT '回應時間(毫秒)',
|
||||
status ENUM('SUCCESS', 'FAILED', 'TIMEOUT') DEFAULT 'SUCCESS' COMMENT '狀態',
|
||||
error_message TEXT COMMENT '錯誤訊息',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
|
||||
date_key DATE GENERATED ALWAYS AS (DATE(created_at)) STORED COMMENT '日期鍵',
|
||||
|
||||
FOREIGN KEY (user_id) REFERENCES dt_users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (job_id) REFERENCES dt_translation_jobs(id) ON DELETE SET NULL,
|
||||
INDEX idx_user_date (user_id, date_key),
|
||||
INDEX idx_api_name (api_name),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API 使用統計表';
|
||||
|
||||
-- 6. 建立 dt_system_logs 表 (系統日誌)
|
||||
CREATE TABLE dt_system_logs (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
level ENUM('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL') NOT NULL COMMENT '日誌級別',
|
||||
category VARCHAR(50) NOT NULL COMMENT '日誌分類',
|
||||
message TEXT NOT NULL COMMENT '日誌訊息',
|
||||
user_id INT COMMENT '關聯到 dt_users.id',
|
||||
job_id BIGINT COMMENT '關聯到 dt_translation_jobs.id',
|
||||
extra_data JSON COMMENT '額外資料',
|
||||
ip_address VARCHAR(45) COMMENT 'IP 地址',
|
||||
user_agent TEXT COMMENT '用戶代理',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
|
||||
date_key DATE GENERATED ALWAYS AS (DATE(created_at)) STORED COMMENT '日期鍵',
|
||||
|
||||
FOREIGN KEY (user_id) REFERENCES dt_users(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (job_id) REFERENCES dt_translation_jobs(id) ON DELETE SET NULL,
|
||||
INDEX idx_level_category (level, category),
|
||||
INDEX idx_user_date (user_id, date_key),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系統日誌表';
|
||||
|
||||
-- 7. 建立 dt_notifications 表 (通知)
|
||||
CREATE TABLE dt_notifications (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT NOT NULL COMMENT '關聯到 dt_users.id',
|
||||
type ENUM('INFO', 'SUCCESS', 'WARNING', 'ERROR') NOT NULL COMMENT '通知類型',
|
||||
title VARCHAR(255) NOT NULL COMMENT '通知標題',
|
||||
message TEXT NOT NULL COMMENT '通知內容',
|
||||
is_read BOOLEAN DEFAULT FALSE COMMENT '是否已讀',
|
||||
data JSON COMMENT '額外資料',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
|
||||
read_at DATETIME COMMENT '已讀時間',
|
||||
|
||||
FOREIGN KEY (user_id) REFERENCES dt_users(id) ON DELETE CASCADE,
|
||||
INDEX idx_user_unread (user_id, is_read),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知表';
|
||||
|
||||
-- 8. 保持現有的 sys_user 表 (專門用於登入記錄)
|
||||
-- sys_user 表已存在,透過 email 與 dt_users 關聯
|
||||
|
||||
-- 9. 重新命名 login_logs 為 dt_login_logs
|
||||
RENAME TABLE login_logs TO dt_login_logs;
|
||||
|
||||
-- 10. 為 dt_login_logs 添加與 dt_users 的關聯
|
||||
ALTER TABLE dt_login_logs
|
||||
ADD COLUMN user_id INT COMMENT '關聯到 dt_users.id',
|
||||
ADD INDEX idx_user_id (user_id),
|
||||
ADD FOREIGN KEY fk_dt_login_logs_user_id (user_id) REFERENCES dt_users(id) ON DELETE SET NULL;
|
||||
|
||||
-- 11. 插入預設管理員使用者
|
||||
INSERT INTO dt_users (username, display_name, email, department, is_admin)
|
||||
VALUES ('ymirliu ymirliu@panjit.com.tw', 'ymirliu ymirliu@panjit.com.tw', 'ymirliu@panjit.com.tw', 'IT', TRUE);
|
||||
|
||||
-- 12. 驗證架構建立
|
||||
SELECT 'Tables created:' as status;
|
||||
SHOW TABLES LIKE 'dt_%';
|
Reference in New Issue
Block a user