创建队伍
用户可以 创建 一个队伍,设置队伍的人数、队伍名称(标题)、描述、超时时间 P0
队长、剩余的人数
聊天?
公开 或 private 或加密
信息流中不展示已过期的队伍
- 请求参数是否为空?
- 是否登录,未登录不允许创建
- 校验信息
- 队伍人数 > 1 且 <= 20
- 队伍标题 <= 20
- 描述 <= 512
- status 是否公开(int)不传默认为 0(公开)
- 如果 status 是加密状态,一定要有密码,且密码 <= 32
- 超时时间 > 当前时间
- 校验用户最多创建 5 个队伍
- 插入队伍信息到队伍表
- 插入用户队伍关系 => 关系表
这边我们会运用到队伍的状态,即公开0,私有1,加密2,所以我们提前写一个队伍状态枚举类
package com.calmthinker.youjian.common; /**
* 队伍状态枚举类
*/
public enum TeamStatusEnum {
PUBLIC(0,"公开"),
PRIVATE(1,"私有"),
SECRET(2,"加密"); private int value;
private String text; public static TeamStatusEnum getEnumByValue(Integer value){
if (value == null){
return null;
}
TeamStatusEnum[] values = TeamStatusEnum.values();
for (TeamStatusEnum teamStatusEnum: values){
if (teamStatusEnum.getValue()==value){
return teamStatusEnum;
}
}
return null;
} TeamStatusEnum(int value, String text) {
this.value = value;
this.text = text;
} public int getValue() {
return value;
} public void setValue(int value) {
this.value = value;
} public String getText() {
return text;
} public void setText(String text) {
this.text = text;
}
}
业务层 — 添加事务
抛异常后,事务自动回滚
controller层
我们需要新建一个队伍添加请求封装类(便于前端知道该输入哪些参数)
新的请求封装类位于model包里的request包
接口文档测试
bug
文档的添加请求参数是封装的请求包装类
但是测试的时候又是Team
自己改一下,然后重启就解决了!
!
bug
添加后数据库 加了8小时
debug 发现,和数据库没关系,传入的时候就已经加了八小时
解决: 修改传入的参数,获取绝对时间
这里过期时间的获取可从控制台输入一下代码来实现,单单的输入年月日会导致数据库里的时间增加8小时(应该是时区的问题)
查询队伍列表
新建 包装类
系统设计:
分页展示队伍列表,根据名称、简介等搜索队伍 P0,信息流中不展示已过期的队伍
- 从请求参数中取出队伍名称等查询条件,如果存在则作为查询条件
- 不展示已过期的队伍(根据过期时间筛选)
- 可以通过某个关键词同时对名称和描述查询
- 只有管理员才能查看加密还有非公开的房间
- todo **关联查询已加入队伍的用户信息(可能会很耗费性能,建议大家用自己写 SQL 的方式实现)
// 1. 自己写sql
// 查询队伍与创建人的信息:
select * from team left join user on team.userId = user.id (left join,表示左表数据必须存在,右表数据可有可无)
// 查询队伍与已加入队伍成员信息: (userTeam表)
select * from team join user_team on team.id = user_team.teamId
这里暂时没实现 入队用户,只实现了关联插叙创建用户的信息
测试,查看拼接的sql
安装插件,查看完整的sql(控制台输出的是预编译的sql)
安装 mybatis-log
修改队伍信息
系统设计:
- 判断请求参数是否为空
- 查询队伍是否存在
- 只有管理员或者队伍的创建者可以修改
- todo : 如果用户传入的新值和老值一致,就不用 update 了(可自行实现,降低数据库使用次数)
- 如果队伍状态改为加密,必须要有密码,反之则清除密码字段
- 更新成功
新建请求包装类
用户加入队伍
系统设计
其他人、未满、未过期,允许加入多个队伍,但是要有个上限 P0
- 用户最多加入 5 个队伍
- 只能加入未满、未过期,存在的队伍
- 不能加入自己的队伍,不能重复加入已加入的队伍(幂等性)
- 禁止加入私有的队伍
- 如果加入的队伍是加密的,必须密码匹配才可以
- 新增队伍 - 用户关联信息
新建请求包装类
用户退出队伍
系统设计
请求参数:队伍 id
业务流程:
- 校验请求参数
- 校验队伍是否存在
- 校验我是否已加入队伍
- 如果队伍
- 只剩一人,队伍解散
- 还有其他人
如果是队长退出队伍,权限转移给第二早加入的用户 —— 先来后到(只用取 id 最小的 2 条数据,先加入的id小)
非队长,自己退出队伍
ⅱ
新建请求包装类
队长解散队伍
系统设计
请求参数:队伍 id
业务流程:
- 校验请求参数
- 校验队伍是否存在
- 校验你是不是队伍的队长
- 移除所有加入队伍的关联信息user-team
- 删除队伍team
添加事务注解
注意这里涉及两张表的改动,且必须同步,加上事务,当抛出错误时,事务回滚
todo 分享队伍
业务流程:
- 生成分享链接(分享二维码)
- 用户访问链接,可以点击加入