feat: 初始化考培练系统项目
- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
10
backend/alembic/versions/add_course_fields.sql
Normal file
10
backend/alembic/versions/add_course_fields.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- 为课程表添加学员统计等字段
|
||||
|
||||
ALTER TABLE `courses`
|
||||
ADD COLUMN `student_count` INT DEFAULT 0 COMMENT '学习人数' AFTER `is_featured`,
|
||||
ADD COLUMN `is_new` BOOLEAN DEFAULT TRUE COMMENT '是否新课程(最近30天内发布)' AFTER `student_count`,
|
||||
ADD INDEX `idx_student_count` (`student_count`),
|
||||
ADD INDEX `idx_is_new` (`is_new`);
|
||||
|
||||
|
||||
|
||||
12
backend/alembic/versions/add_mistake_mastery_fields.sql
Normal file
12
backend/alembic/versions/add_mistake_mastery_fields.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
-- 为错题表添加掌握状态和统计字段
|
||||
|
||||
ALTER TABLE `exam_mistakes`
|
||||
ADD COLUMN `mastery_status` VARCHAR(20) DEFAULT 'unmastered' COMMENT '掌握状态: unmastered-未掌握, mastered-已掌握' AFTER `question_type`,
|
||||
ADD COLUMN `difficulty` VARCHAR(20) DEFAULT 'medium' COMMENT '题目难度: easy-简单, medium-中等, hard-困难' AFTER `mastery_status`,
|
||||
ADD COLUMN `wrong_count` INT DEFAULT 1 COMMENT '错误次数统计' AFTER `difficulty`,
|
||||
ADD COLUMN `mastered_at` DATETIME NULL COMMENT '标记掌握时间' AFTER `wrong_count`,
|
||||
ADD INDEX `idx_mastery_status` (`mastery_status`),
|
||||
ADD INDEX `idx_difficulty` (`difficulty`);
|
||||
|
||||
|
||||
|
||||
30
backend/alembic/versions/create_system_logs_table.sql
Normal file
30
backend/alembic/versions/create_system_logs_table.sql
Normal file
@@ -0,0 +1,30 @@
|
||||
-- 创建系统日志表
|
||||
-- 用于记录系统操作、错误、安全事件等日志信息
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `system_logs` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT COMMENT '日志ID',
|
||||
`level` VARCHAR(20) NOT NULL COMMENT '日志级别: debug, info, warning, error',
|
||||
`type` VARCHAR(50) NOT NULL COMMENT '日志类型: system, user, api, error, security',
|
||||
`user` VARCHAR(100) NULL COMMENT '操作用户',
|
||||
`user_id` INT NULL COMMENT '用户ID',
|
||||
`ip` VARCHAR(100) NULL COMMENT 'IP地址',
|
||||
`message` TEXT NOT NULL COMMENT '日志消息',
|
||||
`user_agent` VARCHAR(500) NULL COMMENT 'User Agent',
|
||||
`path` VARCHAR(500) NULL COMMENT '请求路径(API路径)',
|
||||
`method` VARCHAR(10) NULL COMMENT '请求方法',
|
||||
`extra_data` TEXT NULL COMMENT '额外数据(JSON格式)',
|
||||
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `idx_system_logs_level` (`level`),
|
||||
INDEX `idx_system_logs_type` (`type`),
|
||||
INDEX `idx_system_logs_user` (`user`),
|
||||
INDEX `idx_system_logs_user_id` (`user_id`),
|
||||
INDEX `idx_system_logs_path` (`path`),
|
||||
INDEX `idx_system_logs_created_at` (`created_at`),
|
||||
INDEX `idx_system_logs_level_type` (`level`, `type`),
|
||||
INDEX `idx_system_logs_user_created` (`user`, `created_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统日志表';
|
||||
|
||||
|
||||
|
||||
50
backend/alembic/versions/create_tasks_table.sql
Normal file
50
backend/alembic/versions/create_tasks_table.sql
Normal file
@@ -0,0 +1,50 @@
|
||||
-- 创建任务表
|
||||
CREATE TABLE `tasks` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`title` VARCHAR(200) NOT NULL COMMENT '任务标题',
|
||||
`description` TEXT COMMENT '任务描述',
|
||||
`priority` ENUM('low', 'medium', 'high') DEFAULT 'medium' COMMENT '优先级',
|
||||
`status` ENUM('pending', 'ongoing', 'completed', 'expired') DEFAULT 'pending' COMMENT '任务状态',
|
||||
`creator_id` INT NOT NULL COMMENT '创建人ID',
|
||||
`deadline` DATETIME COMMENT '截止时间',
|
||||
`requirements` JSON COMMENT '任务要求配置',
|
||||
`progress` INT DEFAULT 0 COMMENT '完成进度(0-100)',
|
||||
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`is_deleted` BOOLEAN DEFAULT FALSE,
|
||||
INDEX `idx_status` (`status`),
|
||||
INDEX `idx_creator` (`creator_id`),
|
||||
INDEX `idx_deadline` (`deadline`),
|
||||
FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务表';
|
||||
|
||||
-- 创建任务课程关联表
|
||||
CREATE TABLE `task_courses` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`task_id` INT NOT NULL COMMENT '任务ID',
|
||||
`course_id` INT NOT NULL COMMENT '课程ID',
|
||||
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY `uk_task_course` (`task_id`, `course_id`),
|
||||
FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`course_id`) REFERENCES `courses`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务课程关联表';
|
||||
|
||||
-- 创建任务分配表
|
||||
CREATE TABLE `task_assignments` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`task_id` INT NOT NULL COMMENT '任务ID',
|
||||
`user_id` INT NOT NULL COMMENT '分配用户ID',
|
||||
`team_id` INT DEFAULT NULL COMMENT '团队ID(如果按团队分配)',
|
||||
`status` ENUM('not_started', 'in_progress', 'completed') DEFAULT 'not_started' COMMENT '完成状态',
|
||||
`progress` INT DEFAULT 0 COMMENT '个人完成进度(0-100)',
|
||||
`completed_at` DATETIME COMMENT '完成时间',
|
||||
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY `uk_task_user` (`task_id`, `user_id`),
|
||||
INDEX `idx_status` (`status`),
|
||||
FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务分配表';
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user