团队作业3--需求改进&系统设计
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/ |
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13482 |
团队成员信息
| 序号 | 姓名 | 学号 | 角色 |
|---|---|---|---|
| 1 | 罗天乐(组长) | 3123004800 | 项目经理 |
| 2 | 谢安 | 3123004805 | 测试工程师 |
| 3 | 陈周裕 | 3123004784 | 后端开发工程师 |
| 4 | 徐粤 | 3123004806 | 开发工程师 |
| 5 | 蔡明霏 | 3123002551 | 前端开发工程师 |
| 6 | 林昭南 | 3123004795 | 前端开发工程师 |
| 7 | 李家晋 | 3123004790 | 开发工程师 |
| 8 | 吴键斌 | 3123004803 | 后台开发工程师 |
1. 需求与原型改进
1.1 需求修改说明
| 问题 | 修改方案 |
|---|---|
| 隐私控制不足:分享者无法控制访客能查看或操作哪些内容 | 新增文件访问权限控制、用户身份验证与会话管理机制 |
| 分享权限模糊:无法限制下载、保存等行为 | 支持设置分享权限(仅预览 / 允许下载 / 允许保存),并可随时取消分享或设置有效期 |
| 存储方案不明确:上传文件存放位置未定义 | 采用本地 NAS 存储(自建硬盘阵列),保障数据私有化与可控性 |
1.2 需求规格书改进
1.2.1 原文档不足
- 仅支持“设提取码”和“设有效期”,未细化访客操作权限;
- 未记录分享链接的访问日志。
1.2.2 新增功能
- 分享时可选权限:仅预览 / 允许下载 / 允许保存到网盘 / 隐藏文件名;
- 系统自动记录每次访问:时间、IP 地址、操作类型。
1.2.3 用户故事
小张刚拍完社团招新视频,上传到 EasyPan 后生成分享链接,设置了「7天有效」和提取码,发到新生群。学妹小林点开链接,在线预览了高清视频,但无法下载——因为小张关闭了下载权限。三天后小组复盘,小张在分享记录中看到已有12人查看,便放心取消了链接。期末清理网盘时,他一键清空所有过期分享,腾出5GB空间,刚好存下整学期的课程资料。
2. 系统设计
2.1 系统架构
采用前后端分离架构:
- 前端:Vue 3 SPA,负责用户交互与页面渲染;
- 后端:Spring Boot 提供 RESTful API;
- 网关:Nginx 托管静态资源并反向代理 API 请求;
- 数据层:MySQL(元数据)、Redis(缓存)、本地磁盘(文件内容)。
┌──────────────┐ HTTP/HTTPS ┌───────────────────┐
│ 浏览器 │ ◄─────────────────►│ Nginx │
│ (Vue 3 SPA) │ │ (静态资源 + 反向代理) │
└──────────────┘ └─────────┬─────────┘
│
┌───────────────┴───────────────┐
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ 前端应用服务 │ │ 后端 API 服务 │
│ - 文件上传/下载界面 │ │ - Spring Boot 应用 │
│ - 文件预览组件 │ │ - RESTful 接口 │
│ - 分享/回收站管理 │ │ - JWT 认证 │
└─────────────────────┘ └──────────┬──────────┘
│
┌─────────────────────────┼─────────────────────────┐
▼ ▼ ▼
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ MySQL │ │ Redis │ │ 文件存储系统 │
│ - 用户表 │ │ - 登录会话缓存 │ │ - 本地磁盘 / MinIO │
│ - 文件元数据表 │ │ - 热点文件信息缓存 │ │ - 实际文件内容 │
│ - 分享记录表 │ │ - 分布式锁 │ │ │
│ - 回收站表 │ └─────────────────────┘ └─────────────────────┘
└─────────────────────┘
架构分层说明
| 层级 | 技术栈 | 职责 |
|---|---|---|
| 表现层 | Vue 3 + Element Plus + Pinia | 用户交互、页面渲染、调用 API |
| 网关层 | Nginx | 静态资源托管、API 反向代理、HTTPS |
| 应用层 | Spring Boot + MyBatis Plus | 业务逻辑处理、权限控制、文件服务 |
| 数据层 | MySQL + Redis + 本地存储 | 持久化存储元数据、缓存、文件内容 |
2.2 数据库设计
核心实体关系(ER 文字描述)
用户(User) ──┬── 拥有 ──► 文件(File)
├── 创建 ──► 分享记录(Share)
└── 拥有 ──► 回收站记录(Recycle)
文件(File) ──┬── 属于 ──► 用户(User)
└── 可被 ──► 分享记录(Share) 引用
分享记录(Share) ──► 文件(File)
└── 由 ──► 用户(User) 创建
回收站记录(Recycle) ──► 文件(File)
└── 属于 ──► 用户(User)
数据表结构
1. 用户表 user
| 字段 | 类型 | 说明 |
|---|---|---|
| user_id | BIGINT (PK) | 用户ID |
| VARCHAR(100) | 邮箱(唯一) | |
| password | VARCHAR(100) | 加密密码 |
| nick_name | VARCHAR(50) | 昵称 |
| avatar | VARCHAR(200) | 头像URL |
| space_total | BIGINT | 总空间(字节) |
| space_used | BIGINT | 已用空间(字节) |
| status | TINYINT | 状态(0:禁用, 1:启用) |
| create_time | DATETIME | 注册时间 |
2. 文件表 file
| 字段 | 类型 | 说明 |
|---|---|---|
| file_id | BIGINT (PK) | 文件ID |
| user_id | BIGINT | 所属用户ID |
| parent_id | BIGINT | 父目录ID(0为根目录) |
| file_name | VARCHAR(200) | 文件名 |
| file_path | VARCHAR(500) | 存储路径 |
| file_size | BIGINT | 文件大小(字节) |
| file_type | TINYINT | 类型(0:文件夹, 1:视频, 2:音频...) |
| md5 | CHAR(32) | 文件MD5值 |
| create_time | DATETIME | 创建时间 |
| last_update_time | DATETIME | 最后修改时间 |
| del_flag | TINYINT | 删除标志(0:正常, 1:已删) |
💡
del_flag = 1的文件进入回收站,不进行物理删除。
3. 分享表 share
| 字段 | 类型 | 说明 |
|---|---|---|
| share_id | BIGINT (PK) | 分享ID |
| file_id | BIGINT | 分享的文件ID |
| user_id | BIGINT | 创建者ID |
| share_url | VARCHAR(100) | 分享短链(如 aB3x9) |
| extract_code | VARCHAR(10) | 提取码(可为空) |
| valid_type | TINYINT | 有效期类型(0:1天, 1:7天, 2:30天, 3:永久) |
| create_time | DATETIME | 创建时间 |
| expire_time | DATETIME | 过期时间 |
| status | TINYINT | 状态(0:禁用, 1:启用) |
4. 回收站表 recycle
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT (PK) | 记录ID |
| user_id | BIGINT | 用户ID |
| file_id | BIGINT | 文件ID |
| file_name | VARCHAR(200) | 文件名(快照) |
| delete_time | DATETIME | 删除时间 |
| recover_deadline | DATETIME | 恢复截止时间(删除时间 + 10天) |
3. Alpha 任务分配计划
3.1 功能项选择与优先级
| 功能模块 | 功能描述 | 优先级 | 依赖 | 预估工时 |
|---|---|---|---|---|
| 用户系统 | 注册、登录、JWT 认证 | 高 | 无 | 16h |
| 文件服务 | 单文件上传 + 元数据入库 | 高 | 用户系统 | 20h |
| 文件展示 | 根目录文件/文件夹列表 | 高 | 文件上传 | 12h |
| 前端框架 | Vue3 + 路由 + API 封装 | 中高 | 无 | 10h |
| 通用组件 | 通知、加载、表单校验等 | 中 | 前端框架 | 8h |
| 后台管理 | 管理员登录 + 用户启用/禁用 | 中 | 用户系统 | 12h |
| 测试验证 | 编写用例 + 接口/功能测试 | 高 | 开发完成 | 15h |
3.2 Sprint Backlog 任务分解与认领
| 任务ID | 任务描述 | 模块 | 工时 | 认领人 | 所属周 |
|---|---|---|---|---|---|
| T01 | 设计 user / file 表结构 |
数据库 | 4h | 陈周裕 | 第1周 |
| T02 | 实现注册/登录接口(含 JWT) | 用户认证 | 8h | 陈周裕 | 第1周 |
| T03 | 实现文件上传接口 | 文件服务 | 10h | 李家晋 | 第1周 |
| T04 | 实现文件列表查询接口 | 文件服务 | 6h | 李家晋 | 第1周 |
| T05 | 搭建 Vue3 + Pinia + Router 框架 | 前端基建 | 6h | 蔡明霏 | 第1周 |
| T06 | 开发注册/登录页面 | 用户界面 | 6h | 林昭南 | 第1周 |
| T07 | 开发文件上传组件(拖拽+进度条) | 文件界面 | 8h | 蔡明霏 | 第1–2周 |
| T08 | 开发文件列表页面 | 文件界面 | 6h | 林昭南 | 第2周 |
| T09 | 封装 Axios + Token 拦截器 | 通用模块 | 4h | 徐粤 | 第1周 |
| T10 | 实现全局异常处理 | 通用模块 | 4h | 徐粤 | 第1周 |
| T11 | 后台:管理员登录 + 用户管理页 | 后台功能 | 8h | 吴键斌 | 第2周 |
| T12 | 后台:实现启用/禁用用户接口 | 后台功能 | 4h | 吴键斌 | 第2周 |
| T13 | 编写核心功能测试用例 | 测试设计 | 5h | 谢安 | 第1周末 |
| T14 | 执行接口测试 + 联调验证 | 测试执行 | 10h | 谢安 | 第2周 |
| T15 | 每日站会组织、进度跟踪 | 项目管理 | 1h/天 | 罗天乐 | 全程 |
3.3 迭代冲刺计划(甘特图 - 文字版)
任务阶段 │ 第1周 │ 第2周
│ 周一 周二 周三 周四 周五 │ 周一 周二 周三 周四 周五
─────────────────┼───────────────────────────────┼──────────────────────────────
环境与设计 │ ████
后端核心开发 │ ██████████
前端基础页面 │ █████████
通用模块支持 │ ████
│
文件高级交互 │ │ ████
文件列表 │ │ ██████
后台功能 │ │ ████████
联调与测试 │ ███ │ ██████████
Bug 修复 │ │ ██████
验收与文档归档 │ │ ████
4. 测试计划
测试工作与开发同步开展,贯穿整个 Alpha 迭代周期,主要包括以下四类测试:
单元测试
使用 JUnit + Mockito 对后端核心逻辑(如用户注册校验、文件元数据处理)进行测试,确保单个方法/类行为正确。
接口测试
基于 RESTful API 规范,使用 Postman 或 curl 验证接口的请求参数、响应格式、状态码及错误处理(如重复注册、无效 Token)。
前后端联调测试
前端调用真实后端服务,验证完整业务流程是否通畅,例如:
“用户登录 → 上传文件 → 刷新页面 → 文件出现在列表中”。
用户体验测试
通过小组内部试用,观察用户能否顺利完成核心任务(如注册、上传),重点关注:
- 任务完成率
- 操作是否直观
- 按钮点击是否有及时反馈(如加载动画、成功提示)
所有测试由测试工程师(谢安)主导,开发人员配合修复问题,确保 Alpha 版本核心功能可用、可靠、易用。
浙公网安备 33010602011771号