组队功能设计
组队功能
应用场景
需要跟自己一起参加竞赛、做项目、学习,可以发起队伍或者加入别人的队伍
需求分析
用户可以创建队伍,设置队伍的人数、队伍名称(标题)、描述、超时时间 P0
队长、剩余的人数聊天
公开或私密或加密
用户最多创建 5 个队伍
展示队伍列表,根据名称搜索队伍 P0,信息流中不展示已过期的队伍
修改队伍信息 P0~P1
用户可以加入队伍(其他人、未满人、未过期),允许加入多个队伍,但是有上限 P0
是否需要队长同意?筛选审批?
用户可以退出队伍(如果队长退出,权限转移给第二早加入的用户 – 先来先到)P1
队长可以解散队伍 P0
分享队伍 => 邀请其他用户加入队伍 P1
业务流程:
(1)生成分享连接(分享二维码)
(2)用户访问链接,可以点击加入
系统(接口)设计
1.创建队伍
用户可以创建队伍,设置队伍的人数、队伍名称(标题)、描述、超时时间 P0
队长、剩余的人数
聊天
公开或私密或加密
用户最多创建 5 个队伍
- 请求参数是否为空
- 是否登录,为登录不允许创建
- 校验信息
a. 队伍人数 > 1 且 <= 20
b. 队伍标题小于 20
c. 描述 <= 512
d. status 是否公开(int)不传默认为0(公开)
e. 如果 status 是加密状态,一定要有密码,且密码 <= 32
f. 超时时间 > 当前时间
g.校验用户最多创建 5 个队伍 - 插入队伍信息到队伍表
- 插入用户 => 队伍关系到关系表
2.查询队伍列表
展示队伍列表,根据名称搜索队伍 P0,信息流中不展示已过期的队伍
- 从请求参数中取出队伍名称等查询条件,如果存在则作为查询条件
- 不展示已过期的队伍(根据过期时间筛选)
- 可以通过某个关键字同时对名称和描述查询
- 只有管理员才能查看加密还有非公开的队伍
- 关联查询已加入队伍的用户信息
- 关联查询已加入队伍的用户信息(可能耗费性能,建议用 SQL 实现)
实现方式:
1 | // 查询队伍和创建人信息 |
3.修改队伍信息
- 判断请求参数是否为空
- 查询队伍是否存在
- 只有管理员或者队伍的创建者可以修改
- 如果传入的新值和老值一致,则不需要 update (降低数据库使用次数)
- 如果队伍状态为加密,修改时必须带密码
- 更新队伍信息
4.用户可以加入队伍
其他人、队伍未满、未过期、允许加入过个队伍,但是有上线 P0
- 用户最多加入 5 个队伍
- 队伍必须存在,只能加入未满员、未过期的队伍
- 不能加入自己的队伍,不能重复加入已加入的队伍(幂等性)
- 禁止加入私有的队伍
- 如果加入的队伍是加密的,需要匹配密码
- 修改队伍信息,补充人数
- 新增队伍-用户关联信息
注意,加上事务注解 @Trancational
5.用户退出队伍
请求参数:队伍 id
- 校验请求参数
- 校验队伍是否存在
- 校验我是否已加入队伍
- 如果队伍
- 只剩下一人,解散队伍
- 如果是队长退出,权限转移给第二个人(根据 JoinTime)
- 非队长,自己退出队伍,队伍人数 -1
6.队长解散队伍
请求参数:队伍 id
- 校验请求参数
- 校验队伍是否存在
- 校验是否为队长
- 移除所有加入队伍的关联信息
- 删除队伍
注意:一定要加上事务注解!
7.获取当前用户已加入的队伍
8.获取当前用户创建的队伍
复用 listTeam 方法,只新增查询条件,不做修改(开闭原则)
使用事务注解
@Trancational(rollbackFor = Exception.class)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 墨枫个人博客!
评论