柚见第十期(后端队伍接口详细设计)

创建队伍

用户可以 创建 一个队伍,设置队伍的人数、队伍名称(标题)、描述、超时时间 P0

队长、剩余的人数

聊天?

公开 或 private 或加密

信息流中不展示已过期的队伍

  1. 请求参数是否为空?
  2. 是否登录,未登录不允许创建
  3. 校验信息
  4. 队伍人数 > 1 且 <= 20
  5. 队伍标题 <= 20
  6. 描述 <= 512
  7. status 是否公开(int)不传默认为 0(公开)
  8. 如果 status 是加密状态,一定要有密码,且密码 <= 32
  9. 超时时间 > 当前时间
  10. 校验用户最多创建 5 个队伍
  11. 插入队伍信息到队伍表
  12. 插入用户队伍关系 => 关系表

这边我们会运用到队伍的状态,即公开0,私有1,加密2,所以我们提前写一个队伍状态枚举类

java 复制代码
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,信息流中不展示已过期的队伍

  1. 从请求参数中取出队伍名称等查询条件,如果存在则作为查询条件
  2. 不展示已过期的队伍(根据过期时间筛选)
  3. 可以通过某个关键词同时对名称和描述查询
  4. 只有管理员才能查看加密还有非公开的房间
  5. todo **关联查询已加入队伍的用户信息(可能会很耗费性能,建议大家用自己写 SQL 的方式实现)
java 复制代码
// 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

修改队伍信息

系统设计:

  1. 判断请求参数是否为空
  2. 查询队伍是否存在
  3. 只有管理员或者队伍的创建者可以修改
  4. todo : 如果用户传入的新值和老值一致,就不用 update 了(可自行实现,降低数据库使用次数)
  5. 如果队伍状态改为加密,必须要有密码,反之则清除密码字段
  6. 更新成功

新建请求包装类

用户加入队伍

系统设计

其他人、未满、未过期,允许加入多个队伍,但是要有个上限 P0

  1. 用户最多加入 5 个队伍
  2. 只能加入未满、未过期,存在的队伍
  3. 不能加入自己的队伍,不能重复加入已加入的队伍(幂等性)
  4. 禁止加入私有的队伍
  5. 如果加入的队伍是加密的,必须密码匹配才可以
  6. 新增队伍 - 用户关联信息

新建请求包装类

用户退出队伍

系统设计

请求参数:队伍 id

业务流程:

  1. 校验请求参数
  2. 校验队伍是否存在
  3. 校验我是否已加入队伍
  4. 如果队伍
    • 只剩一人,队伍解散
    • 还有其他人
      如果是队长退出队伍,权限转移给第二早加入的用户 ------ 先来后到(只用取 id 最小的 2 条数据 ,先加入的id小)
      非队长,自己退出队伍

新建请求包装类

队长解散队伍

系统设计

请求参数:队伍 id

业务流程:

  1. 校验请求参数
  2. 校验队伍是否存在
  3. 校验你是不是队伍的队长
  4. 移除所有加入队伍的关联信息user-team
  5. 删除队伍team

添加事务注解

注意这里涉及两张表的改动,且必须同步,加上事务,当抛出错误时,事务回滚

todo 分享队伍

业务流程:

  1. 生成分享链接(分享二维码)
  2. 用户访问链接,可以点击加入
相关推荐
Yz98763 分钟前
Hadoop里面MapReduce的序列化与Java序列化比较
java·大数据·jvm·hadoop·分布式·mapreduce·big data
凯哥Java6 分钟前
优化批处理流程:自定义BatchProcessorUtils的设计与应用
java·数据库·mysql
njnu@liyong14 分钟前
AOP-前置原理-怎么判断和拦截?
java·aop·拦截
末央&19 分钟前
【C++】内存管理
java·开发语言·c++
心之语歌32 分钟前
设计模式 享元模式(Flyweight Pattern)
java·设计模式·享元模式
MTingle33 分钟前
【Java EE】文件IO
java·java-ee
coffee_baby36 分钟前
享元模式详解:解锁高效资源管理的终极武器
java·spring boot·mybatis·享元模式
爱学习的真真子43 分钟前
菜鸟也能轻松上手的Java环境配置方法
java·开发语言
曳渔1 小时前
Java-数据结构-二叉树-习题(三)  ̄へ ̄
java·开发语言·数据结构·算法·链表
shark-chili1 小时前
数据结构与算法-Trie树添加与搜索
java·数据结构·算法·leetcode