Files
my_site/需求文档.md
2026-03-14 11:03:07 +08:00

183 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
# 文件 1Yoyuzh_Portal_需求文档.md
# Yoyuzh Personal Portal 后端需求文档
## 项目概述
该项目为 **yoyuzh.xyz** 的后端系统,提供用户身份认证、个人网盘功能以及重庆大学校园信息接口整合,供前端 Vue3 页面调用。
主要功能:
1. 用户身份认证与管理注册、登录、JWT、密码加密
2. 个人网盘(文件上传/下载/删除/目录管理/分页列表)
3. 重庆大学校园信息接口(课表、成绩)
4. RESTful API 风格,安全、可扩展
---
## 技术选型
| 模块 | 技术/框架 | 说明 |
|------------|---------------------------|--------------------------------|
| 后端框架 | Spring Boot 3.x | Java RESTful 后端快速开发 |
| 数据库 | MySQL / openGauss | 用户、文件、课程信息存储 |
| 安全 | Spring Security + JWT | 身份认证、接口权限控制 |
| 文件存储 | 本地文件系统 / 阿里云 OSS | 网盘文件存储 |
| 构建工具 | Maven | 依赖管理 |
| API 文档 | Swagger / Springdoc | 自动生成接口文档 |
| 日志 | SLF4J + Logback | 日志管理 |
---
## 功能模块
### 1. 用户身份认证
- 注册:`POST /api/auth/register`,加密密码存储,防止重复用户名/邮箱
- 登录:`POST /api/auth/login`,验证密码并生成 JWT
- JWT 验证:拦截需要权限接口,验证 Token有效则注入用户信息
- 获取用户信息:`GET /api/user/profile`
### 2. 个人网盘
- 文件上传:`POST /api/files/upload`,文件流 + 路径
- 文件下载:`GET /api/files/download/{fileId}`
- 文件删除:`DELETE /api/files/{fileId}`
- 文件列表:`GET /api/files/list?path=&page=&size=`
- 目录管理:`POST /api/files/mkdir`
### 3. 重庆大学校园信息接口
- 课表查询:`GET /api/cqu/schedule`,学期/学号参数
- 成绩查询:`GET /api/cqu/grades`,学期/学号参数
- 实现:调用现有 API转换统一 JSON 格式
### 4. 安全与权限
- 网盘接口需登录授权
- 学校信息接口可设置登录访问
- 文件操作需校验用户身份
### 5. 日志与异常
- SLF4J + Logback 日志
- 全局异常处理,统一 JSON 错误返回
- 错误码示例:
- 1000未知错误
- 1001用户未登录
- 1002权限不足
- 1003文件不存在
---
## 数据库设计
### 用户表 (user)
```
id PK
username VARCHAR
email VARCHAR
password_hash VARCHAR
created_at DATETIME
```
### 文件表 (file)
```
id PK
user_id FK -> user.id
filename VARCHAR
path VARCHAR
size BIGINT
created_at DATETIME
```
### 课程表 (course)
```
id PK
user_id FK -> user.id
course_name VARCHAR
teacher VARCHAR
classroom VARCHAR
day_of_week INT
start_time INT
end_time INT
```
### 成绩表 (grade)
```
id PK
user_id FK -> user.id
course_name VARCHAR
grade FLOAT
semester VARCHAR
```
---
## 项目结构
```
yoyuzh-portal-backend
├─ src/main/java/com/yoyuzh
│ ├─ auth # 用户注册/登录/JWT
│ ├─ files # 网盘管理
│ ├─ cqu # 校园信息 API
│ ├─ common # 全局异常处理/工具类
│ └─ config # Spring Security / JWT / Swagger 配置
├─ src/main/resources
│ ├─ application.yml # 数据库/OSS/JWT配置
│ └─ logback.xml # 日志配置
```
---
# 文件 2Yoyuzh_Portal_实现细则.md
# Yoyuzh Personal Portal 后端实现细则
## 1. 用户认证细则
- 密码使用 BCrypt 加密存储
- JWT 有效期 1 天,可刷新
- 注册接口验证邮箱和用户名唯一性
- 登录接口返回 Token + 用户基础信息
- 所有需要权限接口通过 JWT Filter 校验
- 异常统一抛出JSON 返回
## 2. 网盘实现细则
- 上传文件保存路径:`/storage/{userId}/{目录路径}/文件名`
- 文件大小限制:默认 50MB可在配置文件调整
- 文件列表分页:前端请求 `page``size`
- 删除文件时先校验用户身份,确保只能删除自己上传的文件
- 支持创建多级目录,目录路径在数据库中记录
## 3. 重庆大学接口细则
- 调用现有 API 获取课表和成绩
- 统一 JSON 输出:
```json
{
"code": 0,
"msg": "success",
"data": [...]
}
```
- 若用户未登录或 Token 无效,可返回 1001 错误码
- 前端可通过学期参数过滤数据
## 4. 安全与权限细则
- Spring Security 配置:
- `/api/auth/**` 和 Swagger 接口无需认证
- `/api/files/**` 需要认证
- `/api/cqu/**` 可选认证
- JWT Token 通过 Authorization Header 传递:`Bearer {token}`
## 5. 日志与异常处理
- 所有接口调用记录 info 日志
- 异常统一在 `@ControllerAdvice` 中处理
- 返回 JSON 格式:
```json
{
"code": 1000,
"msg": "error message"
}
```
## 6. 数据库细则
- 用户表:唯一索引 username、email
- 文件表user_id + path + filename 组合唯一
- 课程表、成绩表与用户表关联,保证查询方便
- 建议为文件表、课程表添加创建时间索引,加快分页查询