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

创建队伍

用户可以 创建 一个队伍,设置队伍的人数、队伍名称(标题)、描述、超时时间 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,所以我们提前写一个队伍状态枚举类

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 的方式实现)
// 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. 用户访问链接,可以点击加入

获取当前用户已加入队伍

public BaseResponse<List<TeamUserVO>> listMyJoinTeams(TeamQuery teamQuery, HttpServletRequest request) {  
if (teamQuery == null) {  
throw new BusinessException(ErrorCode.PARAMS_ERROR);  
}  
User loginUser = userService.getLoginUser(request);  
QueryWrapper<UserTeam> queryWrapper = new QueryWrapper<>();  queryWrapper.eq("userId", loginUser.getId());  
List<UserTeam> userTeamList = userTeamService.list(queryWrapper);//查询出所有我加入的队伍(这是user_team表)  
//根据userTeamList 获得teamId,再在team表中查询teamList  
// 取出不重复的队伍 id//teamId userId  
//1,2  
//1,3  
//2,3  
//result  
//1=> 2,3  
//2=> 3  Map<Integer, List<UserTeam>> listMap = userTeamList.stream().collect(Collectors.groupingBy(UserTeam::getTeamId));  ArrayList<Integer> idList = new ArrayList<>(listMap.keySet());  teamQuery.setIdList(idList);  List<TeamUserVO> teamList = teamService.listTeams(teamQuery,true);  
return ResultUtils.success(teamList);  
}

注意这里
在这里插入图片描述

获取当前用户已创建队伍

public BaseResponse<List<TeamUserVO>> listMyCreateTeams(TeamQuery teamQuery, HttpServletRequest request) {  
if (teamQuery == null) {  
throw new BusinessException(ErrorCode.PARAMS_ERROR);  
}  User loginUser = userService.getLoginUser(request);  
teamQuery.setUserId(loginUser.getId());  List<TeamUserVO> teamList = teamService.listTeams(teamQuery, true);  
return ResultUtils.success(teamList);  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/538344.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣每日一题 合并后数组中的最大元素 贪心

Problem: 2789. 合并后数组中的最大元素 思路 贪心&#xff1a;从右向左合并&#xff0c;尽可能的多合并&#xff0c;直到不能合并&#xff0c;更新答案&#xff0c;找前一阶段的最大合并值 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code …

Umi - 刷新后页面报404

Umi 项目本地运行刷新没问题&#xff0c;但是部署之后刷新页面报404。因为Umi 默认是用 browser 模式&#xff0c;需要做一下处理。 以下是官方给出解决方案。 一、解决方案 1. 方案一&#xff1a;改用hashHistory .umirc.js {history: { type: hash }, }这个方案项目打包…

如何从任何文档生成指令数据集以进行LLM微调

使用轻量级库经济地生成高质量的合成数据集 大型语言模型 &#xff08;LLMs&#xff09; 是功能强大的通用工具&#xff0c;但它们通常缺乏特定于领域的知识&#xff0c;这些知识通常存储在企业存储库中。 使用您自己的数据微调自定义LLM可以弥合这一差距&#xff0c;而数据准…

如何在Linux部署Docker Registry本地镜像仓库并实现无公网IP远程连接

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

子查询 封装属性创建Connection连接类 数据库连接池

子查询 在select语句中包含另一个select 语句 -->子查询 子查询的分类 单行单列子查询 在where子句中使用 运算符 ! > < -- 查询工资比公司平均工资高的员工信息 -- 查询与员工’smith‘同职位的员工信息 -- 查询比员工joins入职…

八数码(C++)

原题在这里P1379 八数码难题 思路&#xff1a; 本题的思路很有意思&#xff0c;首先我们知道0是可以和上下左右交换位置的&#xff08;前提是不出边界&#xff09; 不难看出我们可以把这个二维数组给转化为一个相对应的字符串来表示当前的状态&#xff0c;每进行一次&#xff…

wxss和css的区别

目录 1. 语法差异 2. 尺寸单位 3. 样式导入 WXSS 示例代码&#xff1a; CSS 示例代码&#xff1a; 4. 组件和属性的支持 总结 WXSS (WeiXin Style Sheets) 和 CSS (Cascading Style Sheets) 都是用于描述文档样式的语言&#xff0c;但它们在微信小程序和网页开发中有一些…

英飞凌电源管理PMIC的安全应用

摘要 本篇文档主要用来介绍英飞凌电源管理芯片TLF35584的使用&#xff0c;基于电动助力转向应用来介绍。包含一些安全机制的执行。 TLF35584介绍 TLF35584是英飞凌推出的针对车辆安全应用的电源管理芯片&#xff0c;符合ASIL D安全等级要求&#xff0c;具有高效多电源输出通道&…

413 Request Entity Too Large 问题如何解决

遇到“413 Request Entity Too Large”错误通常意味着你尝试上传或提交到服务器的数据量超过了服务器能够处理的限制。这个问题通常与Web服务器的配置相关&#xff0c;比如Nginx或Apache。这个问题出现在使用Nginx作为Web服务器的环境中。这里有几种解决方法&#xff1a; 1. 调…

【UE5】非持枪趴姿移动混合空间

项目资源文末百度网盘自取 创建角色在非持枪状态趴姿移动的动画混合空间 在BlendSpace文件夹中单击右键选择 动画(Animation) 中的混合空间(Blend Space) 选择SK_Female_Skeleton 命名为BS_NormaProne 打开BS_NormaProne 水平轴表示角色的方向&#xff0c;命名为Directi…

【刷题训练】反转字符串i 和 ii(区间部分翻转)

344.反转字符串 题目要求 示例 1&#xff1a; 输入&#xff1a;s [“h”,“e”,“l”,“l”,“o”] 输出&#xff1a;[“o”,“l”,“l”,“e”,“h”] 示例 2&#xff1a; 输入&#xff1a;s [“H”,“a”,“n”,“n”,“a”,“h”] 输出&#xff1a;[“h”,“a”,“n”,…

paraview处理openfoam对称模型

paraview处理openfoam对称模型 步骤如下: 导入对称模型,以openfoam中xx\tutorials\incompressible\SRFSimpleFoam\mixer中的搅拌器为例;使用ctrl+space,查找transform,在Filters中也能找到;经过三次transform,可以移动旋转出对称的其他3部分;经过此三次移动旋转,并不能…