feat(user): 新增用户信息更新接口

新增 KeyboardUserReq DTO、Mapper updateByuid 方法及对应 XML,支持昵称/性别/头像/邮箱字段动态更新;补充 USER_INFO_UPDATE_FAILED 错误码,并在 UserController 与 UserServiceImpl 实现 updateUserInfo 逻辑。
This commit is contained in:
2025-12-03 19:27:24 +08:00
parent c4dbc9e475
commit 55aba799b5
7 changed files with 92 additions and 4 deletions

View File

@@ -28,7 +28,8 @@ public enum ErrorCode {
TOKEN_FREEZE(40108, "令牌已被冻结"), TOKEN_FREEZE(40108, "令牌已被冻结"),
TOKEN_NO_PREFIX(40109, "未按照指定前缀提交令牌"), TOKEN_NO_PREFIX(40109, "未按照指定前缀提交令牌"),
FILE_NAME_ERROR(40002, "文件名错误"), FILE_NAME_ERROR(40002, "文件名错误"),
USER_NOT_FOUND(40401, "用户不存在"); USER_NOT_FOUND(40401, "用户不存在"),
USER_INFO_UPDATE_FAILED(50002, "用户信息更新失败");
/** /**
* 状态码 * 状态码
*/ */

View File

@@ -1,10 +1,13 @@
package com.yolo.keyborad.controller; package com.yolo.keyborad.controller;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import com.yolo.keyborad.common.BaseResponse; import com.yolo.keyborad.common.BaseResponse;
import com.yolo.keyborad.common.ResultUtils; import com.yolo.keyborad.common.ResultUtils;
import com.yolo.keyborad.model.dto.AppleLoginReq; import com.yolo.keyborad.model.dto.AppleLoginReq;
import com.yolo.keyborad.model.dto.user.KeyboardUserReq;
import com.yolo.keyborad.model.dto.user.UserLoginDTO; import com.yolo.keyborad.model.dto.user.UserLoginDTO;
import com.yolo.keyborad.model.entity.KeyboardUser;
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO; import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
import com.yolo.keyborad.service.IAppleService; import com.yolo.keyborad.service.IAppleService;
import com.yolo.keyborad.service.UserService; import com.yolo.keyborad.service.UserService;
@@ -14,6 +17,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -59,4 +63,10 @@ public class UserController {
public BaseResponse<KeyboardUserRespVO> login(@RequestBody UserLoginDTO userLoginDTO) { public BaseResponse<KeyboardUserRespVO> login(@RequestBody UserLoginDTO userLoginDTO) {
return ResultUtils.success(userService.login(userLoginDTO)); return ResultUtils.success(userService.login(userLoginDTO));
} }
@PostMapping("/update")
@Operation(summary = "更新用户", description = "更新用户接口")
public BaseResponse<Boolean> update(@RequestBody KeyboardUserReq keyboardUserReq) {
return ResultUtils.success(userService.updateUserInfo(keyboardUserReq));
}
} }

View File

@@ -9,4 +9,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yolo.keyborad.model.entity.KeyboardUser; import com.yolo.keyborad.model.entity.KeyboardUser;
public interface KeyboardUserMapper extends BaseMapper<KeyboardUser> { public interface KeyboardUserMapper extends BaseMapper<KeyboardUser> {
Integer updateByuid(KeyboardUser keyboardUser);
} }

View File

@@ -0,0 +1,42 @@
package com.yolo.keyborad.model.dto.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/*
* @author: ziin
* @date: 2025/12/2 18:08
*/
@Data
@Schema(description="用户信息")
public class KeyboardUserReq {
@Schema(description="用户ID")
private Long uid;
@Schema(description="用户昵称")
private String nickName;
@Schema(description="性别")
private Integer gender;
@Schema(description="头像URL")
private String avatarUrl;
/**
* 邮箱地址
*/
@Schema(description="邮箱地址")
private String email;
/**
* 邮箱是否验证
*/
@Schema(description="邮箱是否验证")
private Boolean emailVerified;
@Schema(description = "token")
private String token;
}

View File

@@ -1,6 +1,7 @@
package com.yolo.keyborad.service; package com.yolo.keyborad.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yolo.keyborad.model.dto.user.KeyboardUserReq;
import com.yolo.keyborad.model.dto.user.UserLoginDTO; import com.yolo.keyborad.model.dto.user.UserLoginDTO;
import com.yolo.keyborad.model.entity.KeyboardUser; import com.yolo.keyborad.model.entity.KeyboardUser;
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO; import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
@@ -16,4 +17,6 @@ public interface UserService extends IService<KeyboardUser> {
KeyboardUser createUserWithSubjectId(String sub); KeyboardUser createUserWithSubjectId(String sub);
KeyboardUserRespVO login(UserLoginDTO userLoginDTO); KeyboardUserRespVO login(UserLoginDTO userLoginDTO);
Boolean updateUserInfo(KeyboardUserReq keyboardUser);
} }

View File

@@ -5,10 +5,12 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yolo.keyborad.common.ErrorCode; import com.yolo.keyborad.common.ErrorCode;
import com.yolo.keyborad.exception.BusinessException; import com.yolo.keyborad.exception.BusinessException;
import com.yolo.keyborad.mapper.KeyboardUserMapper; import com.yolo.keyborad.mapper.KeyboardUserMapper;
import com.yolo.keyborad.model.dto.user.KeyboardUserReq;
import com.yolo.keyborad.model.dto.user.UserLoginDTO; import com.yolo.keyborad.model.dto.user.UserLoginDTO;
import com.yolo.keyborad.model.entity.KeyboardUser; import com.yolo.keyborad.model.entity.KeyboardUser;
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO; import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
@@ -62,4 +64,22 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
keyboardUserRespVO.setToken(StpUtil.getTokenValue()); keyboardUserRespVO.setToken(StpUtil.getTokenValue());
return keyboardUserRespVO; return keyboardUserRespVO;
} }
@Override
public Boolean updateUserInfo(KeyboardUserReq keyboardUserReq) {
KeyboardUser keyboardUserDB = keyboardUserMapper.selectOne(
new LambdaQueryWrapper<KeyboardUser>()
.eq(KeyboardUser::getUid, keyboardUserReq.getUid())
.eq(KeyboardUser::getStatus, false));
if (keyboardUserDB == null) {
throw new BusinessException(ErrorCode.USER_NOT_FOUND);
}
KeyboardUser keyboardUser = BeanUtil.copyProperties(keyboardUserReq, KeyboardUser.class);
Integer i = keyboardUserMapper.updateByuid(keyboardUser);
if (i <=0 ) {
throw new BusinessException(ErrorCode.USER_INFO_UPDATE_FAILED);
}
return true;
}
} }

View File

@@ -23,4 +23,15 @@
id, "uid", nick_name, gender, avatar_url, created_at, updated_at, deleted, email, id, "uid", nick_name, gender, avatar_url, created_at, updated_at, deleted, email,
"status", "password", subject_id, email_verified "status", "password", subject_id, email_verified
</sql> </sql>
<update id="updateByuid">
update keyboard_user
<set>
<if test="nickName != null">nick_name = #{nickName},</if>
<if test="gender != null">gender = #{gender},</if>
<if test="avatarUrl != null">avatar_url = #{avatarUrl},</if>
<if test="email != null">email = #{email},</if>
</set>
where uid = #{uid}
</update>
</mapper> </mapper>