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

news2024/11/17 11:24:59

创建队伍

用户可以 创建 一个队伍,设置队伍的人数、队伍名称(标题)、描述、超时时间 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.coloradmin.cn/o/1517047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%

亲爱的社区小伙伴们&#xff0c;我们很高兴地向大家宣布&#xff0c;在 3 月 8 日我们引来了 Apache Doris 2.1.0 版本的正式发布&#xff0c;欢迎大家下载使用。 在查询性能方面&#xff0c; 2.1 系列版本我们着重提升了开箱盲测性能&#xff0c;力争不做调优的情况下取得较好…

【黑马程序员】Python文件、异常、模块、包

文章目录 文件操作文件编码什么是编码为什么要使用编码 文件的读取openmodel常用的三种基础访问模式读操作相关方法 文件的写入注意代码示例 异常定义异常捕获捕获指定异常捕获多个异常捕获所有异常异常else异常finally 异常的传递 python 模块定义模块的导入import模块名from …

Linux - 安装 nacos(详细教程)

目录 一、简介二、安装前准备三、下载与安装四、基本配置五、单机模式 一、简介 官网&#xff1a;https://nacos.io/ GitHub&#xff1a;https://github.com/alibaba/nacos Nacos 是阿里巴巴推出的一个新开源项目&#xff0c;它主要是一个更易于构建云原生应用的动态服务发现…

单目测距+姿态识别+yolov8界面+车辆行人跟踪计数

yolov5单目测距速度测量目标跟踪&#xff08;算法介绍和代码&#xff09; 1.单目测距实现方法 在目标检测的基础上&#xff0c;我们可以通过计算物体在图像中的像素大小来估计其距离。具体方法是&#xff0c;首先确定某个物体的实际尺寸&#xff0c;然后根据该物体在图像中的像…

CVE-2022-1310:RegExp[@@replace] missing write barrier lead a UAF

文章目录 环境搭建漏洞分析漏洞利用漏洞触发链RCE原语构造 总结参考 环境搭建 嗯&#xff0c;这里不知道是不是环境搭建的有问题&#xff0c;笔者最后成功的实现了任意地址读写&#xff0c;但是任意读写的存在限制&#xff0c;任意写 wasm 的 RWX 区域时会直接报错&#xff0c…

安卓通过termux部署ChatGLM

一、安装Termux并进行相关配置 1、安装termux Termux 是一个 Android 终端仿真应用程序&#xff0c;用于在 Android 手机上搭建一个完整的 Linux 环境。 不需要 root 权限 Termux 就可以正常运行。Termux 基本实现 Linux 下的许多基本操作。可以使用 Termux 安装 python&…

【Python数据结构与判断7/7】数据结构小结

目录 序言 整体回忆 定义方式 访问元素 访问单个元素 访问多个与元素 修改元素 添加元素 列表里添加元素 字典里添加元素 删除元素 in运算符 实战案例 总结 序言 今天将对前面学过的三种数据结构&#xff1a;元组&#xff08;tuple&#xff09;、列表&#xff08;…

什么是制作视频内容?如何搞好视频内容制作?

写在前面 视频内容已成为希望吸引数字观众的企业、品牌和创作者的必备资产。事实上&#xff0c;根据NogenTech的一份报告&#xff0c;在2023年&#xff0c;91%的营销部门使用了这种动态内容。 视频内容创作和优化性能的技巧和窍门的增加绝非巧合。TikTok以及Instagram Reels和…

天地图全国幼儿园数据下载与处理分析

概述 在看天地图服务资源的时候看到有个“幼儿园”的数据&#xff0c;好奇点开看了下&#xff0c;下载下来数据差看了下&#xff0c;数据质量还不错。本篇文章给大家分享一下这个数据的处理以及一些简单的统计分析结果。 数据下载 通过地址https://service.tianditu.gov.cn/…

谷歌网络营销要做什么?

想做谷歌网络营销&#xff0c;广告是不能跳过的一环&#xff0c;花钱买广告位是最最实在的方法了&#xff0c;别人一搜相关的东西&#xff0c;你的产品或者服务就能跳出来&#xff0c;这样感兴趣的用户就会点进去&#xff0c;可以说是最实用的方法&#xff0c;唯一需要考虑的毫…

嵌入式常用5种通信协议

简介&#xff1a; 嵌入式常用五种通信协议为&#xff1a;UART、RS232、RS485、IIC、SPI。 由于这几种通信协议十分相似又有区别&#xff0c;所以分组记忆&#xff0c;红色的为一组&#xff0c;蓝色的为一组。 ①组都有两条线&#xff0c;且都是异步通信没得时钟线&#xff0c…

RuoYi开源项目1-下载并实现运行RuoYi项目

下载并实现运行RuoYi项目 环境需要下载项目项目配置后端项目配置前端项目配置 启动后前端登录页面截图 环境需要 JDK > 8MySQL >5.7Maven > 3.0Node > 12Redis > 3 下图是我的环境配置 下载项目 若依官网 1.进入官网&#xff0c;下载版本如下图RuoYi-Vue前后…

【pyautogui】PyAutoGUI 的简单使用

文章目录 1 简介2 通用功能2.1 暂停/休眠/耗时2.2 自动防故障功能 3 鼠标控制3.1 移动鼠标3.2 获取鼠标指针位置3.3 点击鼠标3.4 拖动鼠标3.5 滚动鼠标3.6 常用方法 4 键盘控制4.1 输入字符串 write4.2 按键操作 press4.3 按下 & 释放4.4 组合键 hotkey4.5 键名 5 屏幕图像…

VC-旅游系统-213-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword旅游系统 旅游信息管理系统开题报告 一、研究目的 旅游信息管理系统能帮助旅行社在游客的市场开拓、游客的信息管理、客户服务等方面进行综合处理。使旅行社能够准确的掌握客户的市场动态&#xff0c;充分了解对客户…

【endnote】advanced science

今天投稿advanced science时&#xff0c;用endnote改格式&#xff0c;一大堆问题 发现标准引用格式如下&#xff0c;显示所有作者&#xff0c;不显示titile等 首先&#xff0c;上网下载了advanced science的格式ens&#xff0c;然后导入到endnote 发现不对&#xff0c;于是乎调…

【Python】科研代码学习:十二 PEFT(高效参数的训练,Adapter适配器)

【Python】科研代码学习&#xff1a;十二 PEFT PEFT简单训练教程简单推理教程Adapter 适配器Merge Adapter 架构关系 PEFT 【HF官网-Doc-PEFT&#xff1a;API】 首先日常问题&#xff0c;是什么&#xff0c;为什么&#xff0c;怎么用 PEFT (Prameter-Efficient Fine-Tuning)&a…

如何在数据库中存储小数:FLOAT、DECIMAL还是BIGINT?

前言 这里还是用前面的例子: 在线机票订票系统的数据表设计。此时已经完成了大部分字段的设计&#xff0c;可能如下: CREATE TABLE flights ( flight_id INT AUTO_INCREMENT PRIMARY KEY, flight_number VARCHAR(10), departure_airport_code VARCHAR(3), arrival_air…

HAProxy——高性能负载均衡器

目录 一.常见的Web集群调度器 二.HAProxy基本介绍 1.HAProxy是什么&#xff1f; 2.HAProxy的特性 3.HAProxy常用的8种负载均衡调度算法 3.1 轮询&#xff1a;RR&#xff08;Round Robin&#xff09; 3.2 最小连接数&#xff1a;LC&#xff08;Least Connections&#xff…

【TB作品】MSP430单片机,音乐播放器,四首音乐,八音盒,Proteus仿真

文章目录 题目要求仿真结果实验报告&#xff1a;基于MSP430单片机的八音盒设计实验目的实验设备实验原理总结 代码和仿真图 题目要求 八音盒 本设计利用MSP430单片机结合内部定时器及LED/LCD,设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。 基本要求: 使用LED/LCD显示器…

分销商城小程序开发可以为商家带来哪些好处

分销小程序的开发帮助商家更多地维系客户&#xff0c;市场竞争越来越激烈&#xff0c;各大商家争抢流量&#xff0c;拼命获客&#xff0c;小程序分销堪比商家的营销神器。 分销商城小程序是指商家通过小程序分销与分销商建立利润分享合作伙伴关系&#xff0c;允许分销商将参与小…