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

2024-03-11 14:36

本文主要是介绍柚见第十期(后端队伍接口详细设计),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

创建队伍

用户可以 创建 一个队伍,设置队伍的人数、队伍名称(标题)、描述、超时时间 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. 用户访问链接,可以点击加入

这篇关于柚见第十期(后端队伍接口详细设计)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/798070

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二:

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Springboot 中使用Sentinel的详细步骤

《Springboot中使用Sentinel的详细步骤》文章介绍了如何在SpringBoot中使用Sentinel进行限流和熔断降级,首先添加依赖,配置Sentinel控制台地址,定义受保护的资源,... 目录步骤 1: 添加 Sentinel 依赖步骤 2: 配置 Sentinel步骤 3: 定义受保护的

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方