改用API驗證

This commit is contained in:
beabigegg
2025-10-02 17:13:24 +08:00
parent 0a89c19fc9
commit adecdf0cce
48 changed files with 6136 additions and 1239 deletions

184
schema_generated.sql Normal file
View File

@@ -0,0 +1,184 @@
-- ============================================================================
-- 自動生成的資料表 Schema
-- 生成時間: 2025-10-01 14:49:58
-- 警告: 此檔案由 generate_schema_from_models.py 自動生成
-- 請勿手動編輯!
-- ============================================================================
USE db_A060;
-- User
DROP TABLE IF EXISTS `dt_users`;
CREATE TABLE IF NOT EXISTS `dt_users` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`username` VARCHAR(100) NOT NULL COMMENT 'AD帳號',
`display_name` VARCHAR(200) NOT NULL COMMENT '顯示名稱',
`email` VARCHAR(255) NOT NULL COMMENT '電子郵件',
`department` VARCHAR(100) COMMENT '部門',
`is_admin` BOOL DEFAULT 0 COMMENT '是否為管理員',
`last_login` DATETIME COMMENT '最後登入時間',
`created_at` DATETIME COMMENT '建立時間',
`updated_at` DATETIME ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
PRIMARY KEY (`id`),
INDEX `ix_dt_users_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- SysUser
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE IF NOT EXISTS `sys_user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(255) NOT NULL COMMENT '登入帳號',
`password_hash` VARCHAR(512) COMMENT '密碼雜湊 (如果需要本地儲存)',
`email` VARCHAR(255) NOT NULL COMMENT '電子郵件',
`display_name` VARCHAR(255) COMMENT '顯示名稱',
`api_user_id` VARCHAR(255) COMMENT 'API 回傳的使用者 ID',
`api_access_token` TEXT COMMENT 'API 回傳的 access_token',
`api_token_expires_at` DATETIME COMMENT 'API Token 過期時間',
`auth_method` ENUM('API','LDAP') DEFAULT 'API' COMMENT '認證方式',
`last_login_at` DATETIME COMMENT '最後登入時間',
`last_login_ip` VARCHAR(45) COMMENT '最後登入 IP',
`login_count` INTEGER DEFAULT 0 COMMENT '登入次數',
`login_success_count` INTEGER DEFAULT 0 COMMENT '成功登入次數',
`login_fail_count` INTEGER DEFAULT 0 COMMENT '失敗登入次數',
`is_active` BOOL DEFAULT 1 COMMENT '是否啟用',
`is_locked` BOOL DEFAULT 0 COMMENT '是否鎖定',
`locked_until` DATETIME COMMENT '鎖定至何時',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
UNIQUE KEY `uk_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- LoginLog
DROP TABLE IF EXISTS `login_logs`;
CREATE TABLE IF NOT EXISTS `login_logs` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(255) NOT NULL COMMENT '登入帳號',
`auth_method` ENUM('API','LDAP') NOT NULL COMMENT '認證方式',
`login_success` BOOL NOT NULL COMMENT '是否成功',
`error_message` TEXT COMMENT '錯誤訊息(失敗時)',
`ip_address` VARCHAR(45) COMMENT 'IP 地址',
`user_agent` TEXT COMMENT '瀏覽器資訊',
`api_response_summary` JSON COMMENT 'API 回應摘要',
`login_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '登入時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- TranslationJob
DROP TABLE IF EXISTS `dt_translation_jobs`;
CREATE TABLE IF NOT EXISTS `dt_translation_jobs` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`job_uuid` VARCHAR(36) NOT NULL COMMENT '任務唯一識別碼',
`user_id` INTEGER NOT NULL COMMENT '使用者ID',
`original_filename` VARCHAR(500) NOT NULL COMMENT '原始檔名',
`file_extension` VARCHAR(10) NOT NULL COMMENT '檔案副檔名',
`file_size` BIGINT NOT NULL COMMENT '檔案大小(bytes)',
`file_path` VARCHAR(1000) NOT NULL COMMENT '檔案路徑',
`source_language` VARCHAR(50) COMMENT '來源語言',
`target_languages` JSON NOT NULL COMMENT '目標語言陣列',
`status` ENUM('PENDING','PROCESSING','COMPLETED','FAILED','RETRY') DEFAULT 'PENDING' COMMENT '任務狀態',
`progress` NUMERIC(5, 2) DEFAULT 0.0 COMMENT '處理進度(%)',
`retry_count` INTEGER DEFAULT 0 COMMENT '重試次數',
`error_message` TEXT COMMENT '錯誤訊息',
`total_tokens` INTEGER DEFAULT 0 COMMENT '總token數',
`total_cost` NUMERIC(10, 4) DEFAULT 0.0 COMMENT '總成本',
`conversation_id` VARCHAR(100) COMMENT 'Dify對話ID用於維持翻譯上下文',
`processing_started_at` DATETIME COMMENT '開始處理時間',
`completed_at` DATETIME COMMENT '完成時間',
`created_at` DATETIME COMMENT '建立時間',
`updated_at` DATETIME ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
`deleted_at` DATETIME COMMENT '軟刪除時間',
PRIMARY KEY (`id`),
CONSTRAINT `fk_dt_translation_jobs_user_id` FOREIGN KEY (`user_id`) REFERENCES `dt_users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- JobFile
DROP TABLE IF EXISTS `dt_job_files`;
CREATE TABLE IF NOT EXISTS `dt_job_files` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`job_id` INTEGER NOT NULL COMMENT '任務ID',
`file_type` ENUM('source','translated') NOT NULL COMMENT '檔案類型',
`language_code` VARCHAR(50) 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 COMMENT '建立時間',
PRIMARY KEY (`id`),
CONSTRAINT `fk_dt_job_files_job_id` FOREIGN KEY (`job_id`) REFERENCES `dt_translation_jobs` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- SystemLog
DROP TABLE IF EXISTS `dt_system_logs`;
CREATE TABLE IF NOT EXISTS `dt_system_logs` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`level` ENUM('DEBUG','INFO','WARNING','ERROR','CRITICAL') NOT NULL COMMENT '日誌等級',
`module` VARCHAR(100) NOT NULL COMMENT '模組名稱',
`user_id` INTEGER COMMENT '使用者ID',
`job_id` INTEGER COMMENT '任務ID',
`message` TEXT NOT NULL COMMENT '日誌訊息',
`extra_data` JSON COMMENT '額外資料',
`created_at` DATETIME COMMENT '建立時間',
PRIMARY KEY (`id`),
CONSTRAINT `fk_dt_system_logs_user_id` FOREIGN KEY (`user_id`) REFERENCES `dt_users` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_dt_system_logs_job_id` FOREIGN KEY (`job_id`) REFERENCES `dt_translation_jobs` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- TranslationCache
DROP TABLE IF EXISTS `dt_translation_cache`;
CREATE TABLE IF NOT EXISTS `dt_translation_cache` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`source_text_hash` VARCHAR(64) NOT NULL COMMENT '來源文字hash',
`source_language` VARCHAR(50) NOT NULL COMMENT '來源語言',
`target_language` VARCHAR(50) NOT NULL COMMENT '目標語言',
`source_text` TEXT NOT NULL COMMENT '來源文字',
`translated_text` TEXT NOT NULL COMMENT '翻譯文字',
`created_at` DATETIME COMMENT '建立時間',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_cache` (`source_text_hash`, `source_language`, `target_language`),
INDEX `idx_languages` (`source_language`, `target_language`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- APIUsageStats
DROP TABLE IF EXISTS `dt_api_usage_stats`;
CREATE TABLE IF NOT EXISTS `dt_api_usage_stats` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`user_id` INTEGER NOT NULL COMMENT '使用者ID',
`job_id` INTEGER COMMENT '任務ID',
`api_endpoint` VARCHAR(200) NOT NULL COMMENT 'API端點',
`prompt_tokens` INTEGER DEFAULT 0 COMMENT 'Prompt token數',
`completion_tokens` INTEGER DEFAULT 0 COMMENT 'Completion token數',
`total_tokens` INTEGER DEFAULT 0 COMMENT '總token數',
`prompt_unit_price` NUMERIC(10, 8) DEFAULT 0.0 COMMENT '單價',
`prompt_price_unit` VARCHAR(20) DEFAULT 'USD' COMMENT '價格單位',
`cost` NUMERIC(10, 4) DEFAULT 0.0 COMMENT '成本',
`response_time_ms` INTEGER DEFAULT 0 COMMENT '回應時間(毫秒)',
`success` BOOL DEFAULT 1 COMMENT '是否成功',
`error_message` TEXT COMMENT '錯誤訊息',
`created_at` DATETIME COMMENT '建立時間',
PRIMARY KEY (`id`),
CONSTRAINT `fk_dt_api_usage_stats_user_id` FOREIGN KEY (`user_id`) REFERENCES `dt_users` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_dt_api_usage_stats_job_id` FOREIGN KEY (`job_id`) REFERENCES `dt_translation_jobs` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Notification
DROP TABLE IF EXISTS `dt_notifications`;
CREATE TABLE IF NOT EXISTS `dt_notifications` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`notification_uuid` VARCHAR(36) NOT NULL COMMENT '通知唯一識別碼',
`user_id` INTEGER NOT NULL COMMENT '使用者ID',
`type` VARCHAR(20) NOT NULL DEFAULT 'info' COMMENT '通知類型',
`title` VARCHAR(255) NOT NULL COMMENT '通知標題',
`message` TEXT NOT NULL COMMENT '通知內容',
`job_uuid` VARCHAR(36) COMMENT '關聯任務UUID',
`link` VARCHAR(500) COMMENT '相關連結',
`is_read` BOOL NOT NULL DEFAULT 0 COMMENT '是否已讀',
`read_at` DATETIME COMMENT '閱讀時間',
`created_at` DATETIME NOT NULL COMMENT '建立時間',
`expires_at` DATETIME COMMENT '過期時間',
`extra_data` JSON COMMENT '額外數據',
PRIMARY KEY (`id`),
CONSTRAINT `fk_dt_notifications_user_id` FOREIGN KEY (`user_id`) REFERENCES `dt_users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;