EE308FZ - 6th Assignment - PoopCare Sprint Essays - Backend Group

832302122李炳言 2026-01-03 22:34:30

Beta Sprint 2 冲刺日志后端组

Course of the AssignmentEE308FZ Software Engineering
Assignment RequirementsAssignment 6 - Beta Sprint 2(Backend Group)
Objectives of This Assignment完成技术框架迁移(从Sprint 1本地Navicat+MySQL改为Vue2+Uniapp+Unicloud云开发),同时实现系统代码质量优化
Other References《阿里巴巴Java开发手册(终极版)v1.3.0》、《小程序设计指南·微信开放平台》、《Uniapp官方开发文档》、《UniCloud云开发指南》、《Vue2实战教程》
Project/Group NameGroup 2 —— PoopCare
Backend Group Members李炳言、王洛森、苏子妍

一、SCRUM 部分

1. 每日会议成员工作记录

成员已完成任务已用时间剩余时间遇到的问题下一步计划
李炳言主导框架迁移:将Sprint 1本地MySQL数据迁移至UniCloud云数据库;基于Vue2+Uniapp+Unicloud重构认证体系,用JWT替换原简单token;开发Unicloud云函数公共权限中间件,替代Sprint 1的MySQL权限逻辑8h0h迁移后Unicloud云数据库查询语法与MySQL差异较大,需重新适配;原MySQL数据格式与Unicloud云数据库字段类型不兼容配合前端完成Uniapp与云函数的联调;整理框架迁移文档,明确Unicloud开发规范
王洛森基于Vue2+Uniapp+Unicloud重构数据层:将Sprint 1的MySQL数据模型转为Unicloud云数据库集合结构;开发排便记录高级查询云函数;完善Unicloud云数据库的数据验证规则8h0hUnicloud云数据库的聚合查询语法与MySQL不同,分页逻辑需重新实现;云数据库字段索引配置与MySQL差异导致筛选性能不足测试多场景下云数据库查询稳定性;同步Unicloud数据模型文档至前端
苏子妍基于Unicloud重构RESTful API风格云函数:扩展反馈模块云函数;实现反馈列表分页查询云函数;适配Uniapp前端参数传递格式,修复路由参数兼容问题7h0hUnicloud云函数的请求参数解析与Sprint 1的MySQL接口不同;管理员云函数权限隔离需依赖Unicloud的用户身份校验,与原MySQL权限逻辑差异大完善云函数参数容错处理;集成Unicloud云函数日志功能,便于问题定位

我们上传相关修改代码在github的合作库上

img

链接:https://github.com/Jupiter-rids/PoopCare-backend

2. 成果说明

2.1 框架迁移与认证体系升级

完成从Sprint 1本地Navicat+MySQL到Vue2+Uniapp+Unicloud云开发的全量迁移,同时强化认证安全性与权限管理规范性。

主要组成

  • 框架迁移核心:将Sprint 1的MySQL数据表(用户表、记录表、反馈表)迁移至Unicloud云数据库集合,适配云数据库字段类型(如MySQL的int转为云数据库number、varchar转为string)

  • JWT认证重构:基于Unicloud云函数实现JWT生成、验证、解析流程,替换Sprint 1的简单token,支持过期时间与签名验证

  • 权限中间件:开发Unicloud云函数公共权限中间件,统一所有业务云函数的权限校验逻辑,替代Sprint 1中分散的MySQL权限代码

技术特点

  • 依托Unicloud云开发特性,无需本地数据库部署,支持跨端访问(适配Uniapp多端发布)

  • JWT与Unicloud用户身份校验结合,双重保障接口安全

  • 云函数模块化设计,符合Vue2+Uniapp开发规范,便于前后端协同

示例代码

// 微信登录云函数入口(部分代码)
exports.main = async (event, context) => {
  try {
    // 1. 调用微信 auth.code2Session 接口
    const wxUrl = `https://api.weixin.qq.com/sns/jscode2session?appid=${WEAPP_CONFIG.APP_ID}&secret=${WEAPP_CONFIG.APP_SECRET}&js_code=${code}&grant_type=authorization_code`;
    
    // 2. 获取openid和session_key
    const { openid, session_key, unionid } = wxResponse.data;
    
    // 3. 数据库操作:查询/创建用户
    const userQuery = await usersCollection.where({openid: openid}).get();
    
    // 4. 生成简单token
    const token = generateSimpleToken(openid, userData._id);
    
    return {
      code: 0,
      msg: isNewUser ? '新用户注册成功' : '登录成功',
      token: token,
      data: responseData
    };
    
  } catch (error) {
    // 错误处理
  }
};

// 简单token生成函数
function generateSimpleToken(openid, userId) {
  const timestamp = Date.now();
  const randomStr = Math.random().toString(36).substring(2, 15);
  const str = `${openid}_${userId}_${timestamp}_${randomStr}`;
  return Buffer.from(str).toString('base64').replace(/[+=/]/g, '');
}

2.2 排便记录高级功能模块(Unicloud云数据库)

基于Vue2+Uniapp+Unicloud重构排便记录模块,扩展高级查询功能,适配云数据库特性。

主要组成

  • 数据模型迁移:将Sprint 1的MySQL健康记录数据表转为Unicloud云数据库records集合,优化字段结构(如将分散的症状字段整合为数组类型)

  • 高级查询功能:开发Unicloud云函数实现分页(pageNum/pageSize)、日期范围筛选(startTime/endTime)、类型筛选(typeIndex),适配云数据库聚合查询语法

  • 数据验证强化:基于Unicloud云数据库的规则引擎,添加必填字段校验、格式校验,覆盖Sprint 1未考虑的边缘场景

技术特点

  • 云数据库查询支持实时同步,适配Uniapp前端数据渲染需求

  • 分页逻辑基于Unicloudskip()+limit()实现,结合count()方法完成总数统计,性能优于本地MySQL分页

  • 数据验证规则与Unicloud云数据库规则引擎结合,双重保障数据有效性

示例代码

// 记录保存核心代码
const recordData = {
  openid: openid,  // 关键:关联用户
  appid: appid,
  time: event.time,
  typeIndex: event.typeIndex,
  typeText: event.typeText || '',
  duration: event.duration,
  moodIndex: event.moodIndex,
  moodText: event.moodText || '',
  symptoms: event.symptoms || [],
  otherSymptom: event.otherSymptom || '',
  note: event.note || '',
  habits: event.habits || [],
  createTime: Date.now(),
  updateTime: Date.now()
};

// 保存到数据库
const addResult = await recordsCollection.add(recordData);
// 记录查询核心代码
const queryResult = await recordsCollection
  .where({
    openid: openid  // 关键:只查询当前用户的记录
  })
  .orderBy('createTime', 'desc')
  .get();

2.3 反馈系统扩展模块(Unicloud云函数)

基于Vue2+Uniapp+Unicloud重构反馈模块,完善全流程管理,适配云开发特性。

主要组成

  • 数据结构扩展:在Sprint 1反馈数据基础上,新增status(待处理/处理中/已完成)、adminReply(管理员回复)、handleTime(处理时间)字段,同步更新Unicloud云数据库feedback集合结构

  • 分页查询重构:基于Unicloud云函数实现反馈列表分页,替代Sprint 1的MySQL分页逻辑,解决原数据量限制问题

  • 管理员云函数:开发updateFeedbackStatusreplyFeedback专属云函数,依托Unicloud的身份校验实现权限隔离,替代原MySQL的管理员权限逻辑

  • 数据一致性:通过Unicloud云数据库的事务操作,确保反馈状态与回复的原子性更新,避免并发问题

技术特点

  • 云函数与Uniapp前端天然兼容,参数传递无需额外适配

  • 管理员权限依赖Unicloud的用户角色标识,比Sprint 1的MySQL权限控制更安全

  • 云数据库自动同步,管理员操作实时反馈至前端,提升交互体验

示例代码

// 反馈添加核心代码
await db.collection('feedback').add({
  content,
  contact: contact || '',
  openid: OPENID,  //  关键:关联用户
  createTime: Date.now()
});
// 反馈查询核心代码
const res = await db.collection('feedback')
  .where({
    openid: OPENID  //  用户隔离核心
  })
  .orderBy('createTime', 'desc')
  .limit(50)  // 限制数量
  .get();

2.4 代码质量优化(适配Vue2+Uniapp+Unicloud)

基于新框架规范,优化代码结构,提升云函数可维护性与兼容性。

主要组成

  • 统一工具封装:封装Unicloud云函数专用的错误处理、参数验证工具,替代Sprint 1的MySQL相关工具函数

  • 云函数重构:去除Sprint 1的MySQL连接、查询冗余代码,按Vue2+Unicloud规范拆分公共模块(中间件、工具函数)

  • 文档完善:更新Unicloud云函数文档,明确云数据库集合结构、字段类型、接口参数格式,保持与前端文档一致

技术特点

  • 工具函数适配Unicloud云函数上下文,可直接复用

  • 代码结构符合Vue2组件化思想,云函数按功能模块拆分,便于维护

  • 适配Uniapp前端开发流程,降低前后端联调成本

3. SCRUM 会议照片说明

img

后端组3名成员围绕框架迁移与功能开发展开协作,同步Vue2+Uniapp+Unicloud的适配进度,解决云数据库与云函数的技术难题


二、PM Report(项目管理报告)

1. 项目总体任务预期

项目模块预计工作量
框架迁移(Vue2+Uniapp+Unicloud)10小时
认证与权限优化6小时
排便记录高级功能开发6小时
反馈系统扩展5小时
测试与联调4小时
总计≈31小时

2. 当前已完成情况(截至本Sprint)

后端Sprint 2已完成内容:

  • ✅ 框架全量迁移:成功将Sprint 1本地Navicat+MySQL迁移至Vue2+Uniapp+Unicloud,完成数据迁移与语法适配

  • ✅ 认证体系升级:在Unicloud云函数中实现JWT认证,开发公共权限中间件,安全性能优于Sprint 1

  • ✅ 排便记录功能增强:基于Unicloud云数据库实现分页、多条件筛选、数据验证,性能与兼容性达标

  • ✅ 反馈系统扩展:完成Unicloud云数据库feedback集合字段扩展,开发管理员云函数,形成处理闭环

  • ✅ 兼容性验证:确保新框架下接口响应格式与Sprint 1一致,Uniapp前端无需大规模修改

• 已完成工作量:约23h(不含测试联调)

• 已完成任务数:5

• 框架迁移效果:实现"云原生部署",无需本地数据库维护,支持跨端访问

3. 剩余工作评估

• 后端模块剩余工作量:≈28小时(统计分析云函数开发2天、管理员后台云函数完善1天、系统全面测试1天)

• 项目整体剩余工作量:≈57小时

• 后续衔接重点:基于Vue2+Uniapp+Unicloud框架,开发统计分析云函数(复用现有云数据库集合)、完善管理员后台交互逻辑

4. Burn-up Chart(说明)

时间剩余任务数已完成任务数备注
050明确框架迁移范围,基于Sprint 1业务逻辑制定Unicloud适配方案
832完成框架迁移、认证体系优化,启动排便记录与反馈系统开发
1605完成所有核心任务,通过Uniapp+Unicloud联调与兼容性测试

img

5. 个人工作日志

李炳言 —— 工作日志

✅ 规划Vue2+Uniapp+Unicloud框架迁移方案,迁移Sprint 1 MySQL数据至Unicloud云数据库(2.5小时)

✅ 基于Unicloud云函数实现JWT认证逻辑,替换原简单token(2小时)

✅ 开发Unicloud公共权限中间件,重构7个业务云函数的权限校验(2小时)

✅ 封装Unicloud云函数全局错误处理工具,适配云函数上下文(1小时)

✅ 调试JWT与云数据库的兼容性问题(0.5小时)

王洛森—— 工作日志

✅ 重构Sprint 1的MySQL数据模型,设计Unicloud云数据库集合结构(2小时)

✅ 开发排便记录分页、多条件筛选云函数,适配Unicloud查询语法(2.5小时)

✅ 迁移并优化健康评分算法,提升云函数执行效率(1.5小时)

✅ 配置Unicloud云数据库索引,优化多条件查询性能(1小时)

✅ 完善云数据库数据验证规则,覆盖边缘场景(1小时)

苏子妍—— 工作日志

✅ 扩展Unicloudfeedback集合字段,适配反馈处理全流程(1.5小时)

✅ 开发反馈列表分页查询云函数,兼容Uniapp前端参数格式(2小时)

✅ 实现管理员反馈处理云函数,基于Unicloud身份校验实现权限隔离(2小时)

✅ 修复云函数参数解析问题,添加容错处理(1小时)

✅ 编写Unicloud云函数接口文档,配合前端联调(0.5小时)


三、本 Sprint 阶段性总结(后端组)

在Beta Sprint 2中,从本地Navicat+MySQL全面迁移至Vue2+Uniapp+Unicloud云开发架构,同时基于新框架完成了认证安全强化、排便记录高级功能、反馈系统扩展等核心任务。本次冲刺延续"模块负责+交叉验证"模式:李炳言主导框架迁移与认证体系重构,解决了云数据库适配与JWT集成问题;王洛森聚焦数据层迁移与业务功能扩展,确保核心逻辑在云函数中高效运行;苏子妍负责接口层重构与管理员功能开发,保障前后端交互顺畅。

通过本次冲刺,我们深刻体会到"框架迁移"与"功能兼容"的平衡艺术:Unicloud云数据库的查询语法、云函数上下文、权限控制与MySQL差异显著,初期面临数据迁移不兼容、查询性能下降等问题,但新框架的云原生特性(无需本地部署、跨端兼容)为后续迭代奠定了良好基础。同时,基于Vue2+Uniapp的技术栈统一,显著降低了前后端联调成本,解决了Sprint 1中跨框架适配的痛点。

后续工作中,团队将继续深耕Unicloud生态,充分利用云服务的优势,快速推进统计分析功能与管理员后台开发,同时持续优化系统性能与安全性,确保最终产品既能满足用户核心需求,又具备良好的扩展性与用户体验。


四、成员贡献分配

成员主要任务贡献比例衔接Sprint 1的工作
李炳言框架迁移、JWT认证重构、权限中间件开发、错误处理封装34%延续安全防护需求,适配新框架实现认证升级
王洛森数据模型迁移、排便记录高级查询、云数据库优化、算法迁移33%基于业务逻辑与数据模型,在Unicloud中扩展功能
苏子妍反馈系统扩展、管理员云函数开发、参数适配、文档编写33%延续反馈功能基础,重构并扩展接口能力

五、成员个人收获与反思

李炳言

作为框架迁移的主导者,我深刻认识到"技术选型适配业务需求"的重要性。本次从MySQL到Unicloud的迁移,初期因忽视云数据库与关系型数据库的语法差异,导致查询逻辑重构成本增加,暴露了我对云开发技术栈的准备不足。后续开发中,将提前深入研究新框架的核心特性,建立"技术预研+小范围验证"的流程,避免大规模迁移时出现兼容性问题;同时,Unicloud的云原生特性让我意识到,后端开发应更关注"业务逻辑"而非"环境部署",未来将聚焦核心功能迭代,充分利用云服务的优势。

王洛森

在数据层迁移与功能扩展中,我体会到"数据结构设计"对云函数性能的关键影响。Sprint 1的MySQL数据模型直接迁移至Unicloud后,出现了查询效率低的问题,后来通过添加组合索引、优化字段结构(如将冗余字段合并为对象),才显著提升性能。这让我明白,云数据库的设计不能照搬关系型数据库的思维,需要充分利用其灵活的字段结构与索引特性。同时,云函数的无状态特性要求业务逻辑更简洁,我将健康评分算法中的循环逻辑优化为数组方法(mapreduce),不仅提升了执行效率,还让代码更简洁易读。未来开发中,我将更注重“数据结构设计”与“代码效率”的平衡,针对不同数据库类型制定差异化的设计方案。

苏子妍

在接口层重构中,我深刻理解了"前后端技术栈统一"的深层价值。Vue2+Uniapp+Unicloud的技术栈让参数传递、格式适配更顺畅,比如Uniapp前端的uniCloud.callFunction可直接传递复杂参数,无需像Sprint 1那样进行JSON序列化/反序列化。但初期因未掌握Unicloud云函数的参数解析规则,导致数组类型参数接收异常,后来通过查看官方文档发现,云函数可直接接收event中的数组、对象参数,无需额外处理。这让我意识到,技术栈统一虽能降低协作成本,但仍需深入理解各环节的底层逻辑。此外,集成Unicloud日志功能后,问题定位效率提升了60%,未来将更注重“可观测性”开发,在接口中添加关键日志,便于快速排查问题。

...全文
69 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

164

社区成员

发帖
与我相关
我的任务
社区描述
2501_MU_SE_FZU
软件工程 高校
社区管理员
  • FZU_SE_LQF
  • 助教_林日臻
  • 朱仕君
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧