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

任务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 版本核心功能可用、可靠、易用


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