浪花 - 更新队伍信息

发布时间:2024年01月23日

一、接口设计

1. 请求路径:/team/update

2. 请求参数:TeamUpdateRequest

  • 有些数据不允许修改,封装一个请求类,只存放允许修改的参数列表
package com.example.usercenter.model.request;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * 可更新队伍参数请求封装类
 */
@Data
public class TeamUpdateRequest implements Serializable {
    private static final long serialVersionUID = 4442151141560122843L;

    /**
     * id
     */
    private Long id;

    /**
     * 队伍名称
     */
    private String name;

    /**
     * 描述
     */
    private String description;

    /**
     * 过期时间
     */
    private Date expireTime;

    /**
     * 0 - 公开,1 - 私有,2 - 加密
     */
    private Integer status;

    /**
     * 密码
     */
    private String password;
}

3. 请求方式:POST

4. 响应数据:BaseResponse<Boolean>,返回是否更新成功的布尔值

二、业务逻辑

1. 判断请求参数是否为空

2. 查询队伍是否存在

3. 只有管理员和队伍的创建者可以修改队伍信息

4. TODO 如果用户传入的新值和老值一致,就不用执行 UPDATE 语句(可以减少数据库资源的消耗)

5. 如果队伍状态改为加密,必须要加上密码

6. 更新成功返回信息

    @Override
    public boolean updateTeam(TeamUpdateRequest teamUpdateRequest, User loginUser) {
        if (teamUpdateRequest == null) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR);
        }
        Long id = teamUpdateRequest.getId();
        if (id == null || id <= 0) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR);
        }
        Team oldTeam = this.getById(id);
        if (oldTeam == null) {
            throw new BusinessException(ErrorCode.NULL_ERROR, "队伍不存在");
        }
        // 判断用户权限:非管理员或队伍创建人不可修改队伍信息
        if (!Objects.equals(oldTeam.getUserId(), loginUser.getId()) && !userService.isAdmin(loginUser)) {
            throw new BusinessException(ErrorCode.NO_AUTH);
        }
        Team updateTeam = new Team();
        BeanUtils.copyProperties(teamUpdateRequest, updateTeam);
        return this.updateById(updateTeam);
    }

?

三、接口测试

1. 踩坑记录:Bean 的依赖关系形成循环

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   teamController
┌─────┐
|  teamServiceImpl
└─────┘


Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.
  • 报错原因:在 TeamServiceImpl 中注入了 TeamService,造成 Bean 的循环依赖
  • 解决:删除注入的 TeamService?

2. 使用 Knife4j 接口文档进行测试

文章来源:https://blog.csdn.net/m0_74059961/article/details/135783341
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。