|
|
## 一、API规范
|
|
|
|
|
|
### 1.1 基础信息
|
|
|
|
|
|
|
|
|
|
|
|
- **基础URL**: `http://localhost:8080`(本地测试)
|
|
|
|
|
|
- **接口格式**: RESTful API
|
|
|
|
|
|
- **数据格式**: JSON
|
|
|
|
|
|
- **字符编码**: UTF-8
|
|
|
|
|
|
- **认证方式**: JWT (JSON Web Token)
|
|
|
|
|
|
|
|
|
|
|
|
- **GET**: 获取资源
|
|
|
- **POST**: 创建资源
|
|
|
- **PUT**: 更新资源(全量更新)
|
|
|
- **PATCH**: 部分更新资源
|
|
|
- **DELETE**: 删除资源
|
|
|
|
|
|
### 1.2 响应规范
|
|
|
|
|
|
#### 响应状态码
|
|
|
|
|
|
- **200**: 成功
|
|
|
- **400**: 请求参数错误
|
|
|
- **401**: 未授权
|
|
|
- **403**: 禁止访问
|
|
|
- **404**: 资源不存在
|
|
|
- **500**: 服务器内部错误
|
|
|
|
|
|
#### 后端相应格式
|
|
|
|
|
|
成功响应:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"code": 200, // 200表示成功
|
|
|
"message": "success",
|
|
|
"data": { // 实际返回数据
|
|
|
// ...
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
错误相应:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"code": 400,
|
|
|
"message": "参数错误", // 错误信息
|
|
|
"data": null
|
|
|
}
|
|
|
```
|
|
|
|
|
|
## 二、 数据库设计
|
|
|
|
|
|
### 2.1用户表设计 (users)
|
|
|
|
|
|
| 字段名 | 类型 | 约束 | 说明 |
|
|
|
| ----------- | ------------ | ----------------------------------------------------- | ------------------------------------ |
|
|
|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 用户ID |
|
|
|
| username | VARCHAR(50) | NOT NULL, UNIQUE | 用户名 |
|
|
|
| email | VARCHAR(100) | NOT NULL, UNIQUE | 邮箱地址(学校邮箱) |
|
|
|
| password | VARCHAR(255) | NOT NULL | 密码(加密存储) |
|
|
|
| nickname | VARCHAR(50) | NOT NULL | 昵称 |
|
|
|
| avatar | VARCHAR(255) | | 头像URL |
|
|
|
| bio | TEXT | | 个人简介 |
|
|
|
| gender | TINYINT | | 性别(0-未知, 1-男, 2-女) |
|
|
|
| student_id | VARCHAR(20) | UNIQUE | 学号 |
|
|
|
| department | VARCHAR(100) | | 院系 |
|
|
|
| major | VARCHAR(100) | | 专业 |
|
|
|
| grade | VARCHAR(20) | | 年级 |
|
|
|
| points | INT | DEFAULT 0 | 积分 |
|
|
|
| role | TINYINT | DEFAULT 0 | 角色(0-普通用户, 1-版主, 2-管理员) |
|
|
|
| status | TINYINT | DEFAULT 1 | 状态(0-禁用, 1-启用) |
|
|
|
| is_verified | TINYINT | DEFAULT 0 | 是否验证(0-未验证, 1-已验证) |
|
|
|
| login_ip | VARCHAR(50) | | 最近登录IP |
|
|
|
| login_time | DATETIME | | 最近登录时间 |
|
|
|
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
|
|
|
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
|
|
|
|
|
|
#### 建表语句
|
|
|
|
|
|
```sql
|
|
|
CREATE TABLE `users` (
|
|
|
`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
|
|
|
`username` VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
|
|
|
`email` VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱地址(学校邮箱)',
|
|
|
`password` VARCHAR(255) NOT NULL COMMENT '密码(加密存储)',
|
|
|
`nickname` VARCHAR(50) NOT NULL COMMENT '昵称',
|
|
|
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像URL',
|
|
|
`bio` TEXT DEFAULT NULL COMMENT '个人简介',
|
|
|
`gender` TINYINT DEFAULT 0 COMMENT '性别(0-未知, 1-男, 2-女)',
|
|
|
`student_id` VARCHAR(20) UNIQUE DEFAULT NULL COMMENT '学号',
|
|
|
`department` VARCHAR(100) DEFAULT NULL COMMENT '院系',
|
|
|
`major` VARCHAR(100) DEFAULT NULL COMMENT '专业',
|
|
|
`grade` VARCHAR(20) DEFAULT NULL COMMENT '年级',
|
|
|
`points` INT DEFAULT 0 COMMENT '积分',
|
|
|
`role` TINYINT DEFAULT 0 COMMENT '角色(0-普通用户, 1-版主, 2-管理员)',
|
|
|
`status` TINYINT DEFAULT 1 COMMENT '状态(0-禁用, 1-启用)',
|
|
|
`is_verified` TINYINT DEFAULT 0 COMMENT '是否验证(0-未验证, 1-已验证)',
|
|
|
`login_ip` VARCHAR(50) DEFAULT NULL COMMENT '最近登录IP',
|
|
|
`login_time` DATETIME DEFAULT NULL 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` (`username`),
|
|
|
INDEX `idx_student_id` (`student_id`),
|
|
|
INDEX `idx_role` (`role`),
|
|
|
INDEX `idx_status` (`status`)
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 三、Api功能实现
|
|
|
|
|
|
### 3.1用户认证模块
|
|
|
|
|
|
#### 3.1.1 用户注册
|
|
|
|
|
|
- **URL**: `/users/register`
|
|
|
|
|
|
- **方法**: POST
|
|
|
|
|
|
- **描述**: 创建新用户账号
|
|
|
|
|
|
请求参数:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"username": "student123",
|
|
|
"email": "student@school.edu",
|
|
|
"password": "Secure@Password123",
|
|
|
"nickname": "学生昵称",
|
|
|
"studentId": "20220101001",
|
|
|
"department": "计算机学院",
|
|
|
"major": "软件工程",
|
|
|
"grade": "2023级"
|
|
|
}
|
|
|
```
|
|
|
|
|
|
响应结果:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"code": 200,
|
|
|
"message": "注册成功",
|
|
|
"data": {
|
|
|
"userId": 12345,
|
|
|
"username": "student123",
|
|
|
"nickname": "学生昵称"
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
|
|
|
#### 3.1.2 用户密码登录
|
|
|
|
|
|
- **URL**: `/users/login`
|
|
|
- **方法**: POST
|
|
|
- **描述**: 用户登录
|
|
|
|
|
|
请求参数:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"username": "student123", // 用户名或邮箱
|
|
|
"password": "Secure@Password123"
|
|
|
}
|
|
|
```
|
|
|
|
|
|
响应结果:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"code": 200,
|
|
|
"message": "登录成功",
|
|
|
"data": {
|
|
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
|
"userInfo": {
|
|
|
"userId": 12345,
|
|
|
"username": "student123",
|
|
|
"nickname": "学生昵称",
|
|
|
"avatar": "https://example.com/avatar.jpg",
|
|
|
"role": 0,
|
|
|
"isVerified": true,
|
|
|
"status": 1
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
#### 3.1.3 获取邮箱验证码
|
|
|
|
|
|
- **URL**: `/users/code`
|
|
|
|
|
|
- **方法**: POST
|
|
|
|
|
|
- **描述**: 向指定邮箱发送登录验证码
|
|
|
|
|
|
请求参数
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"email": "student@school.edu"
|
|
|
}
|
|
|
```
|
|
|
|
|
|
响应结果:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"code": 200,
|
|
|
"message": "验证码已发送",
|
|
|
"data": null
|
|
|
}
|
|
|
```
|
|
|
|
|
|
#### 3.1.4 邮箱验证码登录
|
|
|
|
|
|
- **URL**: `/users/login/code`
|
|
|
- **方法**: POST
|
|
|
- **描述**: 使用邮箱和验证码进行登录
|
|
|
|
|
|
请求参数
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"email": "student@school.edu",
|
|
|
"code": "123456"
|
|
|
}
|
|
|
```
|
|
|
|
|
|
成功响应:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"code": 200,
|
|
|
"message": "登录成功",
|
|
|
"data": {
|
|
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
|
"userInfo": {
|
|
|
"userId": 12345,
|
|
|
"username": "student123",
|
|
|
"nickname": "学生昵称",
|
|
|
"avatar": "https://example.com/avatar.jpg",
|
|
|
"role": 0
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|