217 lines
5.7 KiB
Markdown
217 lines
5.7 KiB
Markdown
# 艺考招生管理系统 API
|
|
|
|
## 项目概述
|
|
|
|
艺考招生管理系统是一个基于 Go + Gin + GORM + Redis 的 RESTful API 服务,用于管理和计算艺考志愿填报、成绩统计和录取概率等功能。
|
|
|
|
### 核心技术栈
|
|
|
|
- **Go 1.21+** - 主要开发语言
|
|
- **Gin** - Web 框架
|
|
- **GORM** - ORM 框架
|
|
- **MySQL 8.0** - 数据存储
|
|
- **Redis** - 会话存储和限流
|
|
- **Swaggo** - API 文档生成
|
|
|
|
### 项目架构
|
|
|
|
项目采用典型的分层架构模式:
|
|
|
|
```
|
|
server/
|
|
├── main.go # 应用程序入口
|
|
├── config/ # 配置文件
|
|
│ ├── config.go # 应用配置
|
|
│ ├── database.go # MySQL 配置
|
|
│ └── redis.go # Redis 配置
|
|
├── common/ # 公共组件
|
|
│ ├── response.go # 统一响应格式
|
|
│ ├── context.go # 上下文工具
|
|
│ ├── logger.go # 日志工具
|
|
│ └── password.go # 密码加密
|
|
├── middleware/ # 中间件
|
|
│ ├── auth.go # 登录鉴权
|
|
│ ├── security.go # 安全校验
|
|
│ ├── ratelimit.go # 接口限流
|
|
│ └── cors.go # 跨域处理
|
|
├── modules/ # 业务模块
|
|
│ ├── system/ # 系统模块 (用户认证、权限管理)
|
|
│ ├── user/ # 用户模块 (用户相关功能)
|
|
│ └── yx/ # 艺考模块 (核心业务)
|
|
├── docs/ # API 文档
|
|
└── logs/ # 日志目录
|
|
```
|
|
|
|
### 业务模块
|
|
|
|
#### 1. 系统模块 (system)
|
|
- 用户认证 (登录/登出/用户信息)
|
|
- 用户管理
|
|
|
|
#### 2. 用户模块 (user)
|
|
- 成绩管理
|
|
- 专业选择
|
|
- 志愿填报
|
|
- 用户认证
|
|
|
|
#### 3. 艺考模块 (yx)
|
|
- 院校专业管理
|
|
- 历年招生数据
|
|
- 计算专业逻辑
|
|
- 用户成绩管理
|
|
- 志愿管理
|
|
- 志愿记录管理
|
|
|
|
## 部署与运行
|
|
|
|
### 环境要求
|
|
- Go 1.21+
|
|
- MySQL 8.0
|
|
- Redis
|
|
|
|
### 快速启动
|
|
|
|
```bash
|
|
cd server
|
|
go mod tidy
|
|
swag init
|
|
go run main.go
|
|
```
|
|
|
|
### 配置说明
|
|
|
|
系统支持多环境配置文件:
|
|
|
|
- `config/config.dev.yaml` - 开发环境
|
|
- `config/config.test.yaml` - 测试环境
|
|
- `config/config.prod.yaml` - 生产环境
|
|
|
|
配置文件格式示例:
|
|
```yaml
|
|
server:
|
|
port: 8081
|
|
|
|
database:
|
|
driver: mysql
|
|
host: localhost
|
|
port: 3306
|
|
database: yitisheng
|
|
username: root
|
|
password: "password"
|
|
|
|
redis:
|
|
addr: localhost:6379
|
|
password: "password"
|
|
db: 1
|
|
```
|
|
|
|
## 安全机制
|
|
|
|
### 1. 登录鉴权
|
|
- 基于 JWT Token 的身份验证
|
|
- 支持白名单配置,允许特定接口无需登录访问
|
|
- Token 存储在 Redis 中,支持过期时间设置
|
|
|
|
### 2. 安全校验
|
|
- 请求头需携带签名进行验证
|
|
- 防暴力破解机制
|
|
- 支持白名单配置
|
|
|
|
### 3. 接口限流
|
|
- 基于 Redis 滑动窗口算法
|
|
- 支持按用户ID或IP限流
|
|
- 可为不同接口配置不同限流规则
|
|
|
|
## API 接口
|
|
|
|
### 认证相关
|
|
| 方法 | 路径 | 说明 |
|
|
|------|------|------|
|
|
| POST | /api/user/auth/login | 用户登录 |
|
|
| POST | /api/user/auth/logout | 用户登出 |
|
|
| GET | /api/user/auth/info | 获取当前用户信息 |
|
|
|
|
### 系统管理
|
|
| 方法 | 路径 | 说明 |
|
|
|------|------|------|
|
|
| GET | /api/sys-users | 获取用户列表 |
|
|
| POST | /api/sys-users | 创建用户 |
|
|
| PUT | /api/sys-users/:id | 更新用户 |
|
|
| DELETE | /api/sys-users/:id | 删除用户 |
|
|
|
|
### 艺考相关
|
|
| 方法 | 路径 | 说明 |
|
|
|------|------|------|
|
|
| GET | /api/yx-school-majors | 获取院校专业列表 |
|
|
| GET | /api/yx-history-enrolls | 获取历年招生数据 |
|
|
| GET | /api/yx-calculation-majors | 获取计算专业数据 |
|
|
| GET | /api/yx-user-scores | 获取用户成绩 |
|
|
| GET | /api/yx-volunteers | 获取志愿列表 |
|
|
| POST | /api/yx-volunteers | 创建志愿 |
|
|
| PUT | /api/yx-volunteers/:id | 更新志愿 |
|
|
| DELETE | /api/yx-volunteers/:id | 删除志愿 |
|
|
|
|
### 中间件执行顺序
|
|
|
|
```
|
|
请求 -> 安全校验 -> 限流 -> 登录鉴权 -> Controller
|
|
```
|
|
|
|
## 数据实体
|
|
|
|
### YxVolunteer (志愿表)
|
|
- ID: 主键
|
|
- VolunteerName: 志愿单名称
|
|
- ScoreId: 关联成绩ID
|
|
- CreateType: 生成类型 (1.手动生成, 2.智能生成)
|
|
- State: 状态 (0-未使用, 1-使用中, 2-历史)
|
|
- CreateBy: 创建人
|
|
- CreateTime: 创建时间
|
|
- UpdateBy: 更新人
|
|
- UpdateTime: 更新时间
|
|
|
|
## 常量定义
|
|
|
|
### 业务状态常量
|
|
- StateActive ("1") - 使用中
|
|
- StateInactive ("0") - 未使用/已删除
|
|
- StateHistory ("2") - 历史记录
|
|
|
|
### 令牌相关
|
|
- TokenHeader: "Authorization"
|
|
- HeaderTokenPrefix: "Bearer "
|
|
- RedisTokenExpire: 24小时
|
|
|
|
## 日志系统
|
|
|
|
- 支持 debug/info/warn/error 级别
|
|
- 输出到 HTML 文件,按日期和启动次数命名
|
|
- 可配置是否同时输出到控制台
|
|
|
|
## 开发规范
|
|
|
|
### 代码风格
|
|
- 使用 Go 语言标准格式 (go fmt)
|
|
- 遵循 Go 语言命名规范
|
|
- 使用有意义的变量和函数名
|
|
|
|
### 错误处理
|
|
- 统一使用 common.Error(c, code, message) 返回错误
|
|
- 业务错误码使用 HTTP 标准码或自定义业务码
|
|
- 记录详细错误日志便于调试
|
|
|
|
### 接口文档
|
|
- 使用 Swaggo 注解生成 API 文档
|
|
- 所有公开接口都应有完整的文档注释
|
|
- 包含请求参数、响应格式和错误码说明
|
|
|
|
## 额外说明
|
|
|
|
项目还包含一些 Java 代码文件,如 `ScoreUtil.java`,这表明项目可能正在从 Java 版本迁移到 Go 版本,或者 Java 版本作为参考。Go 版本中的 `server/modules/yx/service/score_util.go` 文件可能包含与 Java 版本相同功能的实现。
|
|
|
|
## 注意事项
|
|
|
|
- 开发环境中的安全校验默认关闭 (enable: false)
|
|
- 生产环境务必开启安全校验
|
|
- 需要配置合适的限流规则防止恶意请求
|
|
- 定期清理日志文件避免磁盘空间不足 |