团队作业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
email 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 任务分解与认领

任务编号 任务描述 模块 工时 负责人 优先级 计划时间
T01 设计用户与文件表结构 数据库 2h 陈周裕 P0 周一上午
T02 实现注册登录接口(含JWT) 用户认证 4h 陈周裕 P0 周一下午
T03 实现文件上传接口 文件服务 5h 李家晋 P0 周一全天
T04 实现文件列表查询接口 文件服务 3h 李家晋 P0 周二上午
T05 搭建前端基础框架 前端基建 3h 蔡明霏 P0 周一上午
T06 开发注册登录页面 用户界面 3h 林昭南 P0 周一下午
T07 开发文件上传组件 文件界面 4h 蔡明霏 P0 周二上午
T08 开发文件列表页面 文件界面 3h 林昭南 P1 周三上午
T09 封装请求拦截器 通用模块 2h 徐粤 P0 周一上午
T10 实现全局异常处理 通用模块 2h 徐粤 P1 周一下午
T11 开发后台管理功能 后台功能 4h 吴键斌 P1 周三上午
T12 实现用户管理接口 后台功能 2h 吴键斌 P1 周三下午
T13 编写核心功能测试用例 测试设计 2.5h 谢安 P1 周二下午
T14 执行接口测试与联调验证 测试执行 5h 谢安 P0 周四全天
T15 组织每日站会与进度跟踪 项目管理 每日0.5h 罗天乐 P0 每日晨会
T16 缺陷修复与性能优化 联调修复 4h 全体成员 P0 周五上午
T17 项目验收与文档归档 项目整理 2h 罗天乐 P1 周五下午
T18 实现分片上传、秒传与MD5校验完整逻辑 文件服务 6h 李家晋 P0 周六全天
T19 实现分享链接生成与提取码验证接口 文件服务 3h 徐粤 P1 周六上午
T20 开发分享访问前端页面 文件界面 3h 林昭南 P1 周六下午
T21 实现回收站恢复与彻底删除接口 文件服务 3h 徐粤 P0 周日上午
T22 开发回收站管理前端页面 文件界面 3h 陈周裕 P0 周日上午
T23 实现图片/文本基础预览前端支持 文件界面 3h 蔡明霏 P1 周日下午
T24 执行端到端测试并验证核心流程 测试执行 4h 谢安 P0 周日全天
T25 优化管理员用户管理界面(列表/状态切换) 后台功能 3h 吴键斌 P1 周六全天
T26 编写系统部署与API使用简要文档 项目收尾 2h 罗天乐 P1 周日下午

3.3 迭代冲刺计划(甘特图 - 文字版)

任务阶段         │ 周一      周二      周三      周四      周五      周六      周日
─────────────────┼──────────────────────────────────────────────────────────────────────
环境与设计       │ ████                                                              
后端核心开发     │ ████████  █████                                                   
前端基础页面     │ ████      ██████      ██                                          
通用模块支持     │ ████      ██                                                      
文件列表         │           ███       █████                                         
后台功能         │                     ██████                ████                    
文件高级交互     │                                                   ████████████  ████████
联调与测试       │                             ██████████                            
端到端验证       │                                                           ████████
Bug 修复         │                                   ██████                          
验收与文档归档   │                                         ██                    ██
─────────────────┴──────────────────────────────────────────────────────────────────────

4. 测试计划

测试工作与开发同步开展,贯穿整个 Alpha 迭代周期,主要包括以下四类测试:

单元测试

使用 JUnit + Mockito 对后端核心逻辑(如用户注册校验、文件元数据处理)进行测试,确保单个方法/类行为正确。

接口测试

基于 RESTful API 规范,使用 Postman 或 curl 验证接口的请求参数、响应格式、状态码及错误处理(如重复注册、无效 Token)。

前后端联调测试

前端调用真实后端服务,验证完整业务流程是否通畅,例如:

“用户登录 → 上传文件 → 刷新页面 → 文件出现在列表中”。

用户体验测试

通过小组内部试用,观察用户能否顺利完成核心任务(如注册、上传),重点关注:

  • 任务完成率
  • 操作是否直观
  • 按钮点击是否有及时反馈(如加载动画、成功提示)

所有测试由测试工程师(谢安)主导,开发人员配合修复问题,确保 Alpha 版本核心功能可用、可靠、易用


posted @ 2025-11-22 19:30  luoluck  阅读(24)  评论(0)    收藏  举报