From 55aba799b5e8f43e5468e31639e2e8f2a8c8b811 Mon Sep 17 00:00:00 2001 From: ziin Date: Wed, 3 Dec 2025 19:27:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=20=E6=96=B0=E5=A2=9E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BF=A1=E6=81=AF=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 KeyboardUserReq DTO、Mapper updateByuid 方法及对应 XML,支持昵称/性别/头像/邮箱字段动态更新;补充 USER_INFO_UPDATE_FAILED 错误码,并在 UserController 与 UserServiceImpl 实现 updateUserInfo 逻辑。 --- .../com/yolo/keyborad/common/ErrorCode.java | 3 +- .../keyborad/controller/UserController.java | 16 +++++-- .../keyborad/mapper/KeyboardUserMapper.java | 1 + .../model/dto/user/KeyboardUserReq.java | 42 +++++++++++++++++++ .../yolo/keyborad/service/UserService.java | 3 ++ .../service/impl/UserServiceImpl.java | 20 +++++++++ .../resources/mapper/KeyboardUserMapper.xml | 11 +++++ 7 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/yolo/keyborad/model/dto/user/KeyboardUserReq.java diff --git a/src/main/java/com/yolo/keyborad/common/ErrorCode.java b/src/main/java/com/yolo/keyborad/common/ErrorCode.java index 86e9807..622b4b5 100644 --- a/src/main/java/com/yolo/keyborad/common/ErrorCode.java +++ b/src/main/java/com/yolo/keyborad/common/ErrorCode.java @@ -28,7 +28,8 @@ public enum ErrorCode { TOKEN_FREEZE(40108, "令牌已被冻结"), TOKEN_NO_PREFIX(40109, "未按照指定前缀提交令牌"), FILE_NAME_ERROR(40002, "文件名错误"), - USER_NOT_FOUND(40401, "用户不存在"); + USER_NOT_FOUND(40401, "用户不存在"), + USER_INFO_UPDATE_FAILED(50002, "用户信息更新失败"); /** * 状态码 */ diff --git a/src/main/java/com/yolo/keyborad/controller/UserController.java b/src/main/java/com/yolo/keyborad/controller/UserController.java index bf8d808..a78a179 100644 --- a/src/main/java/com/yolo/keyborad/controller/UserController.java +++ b/src/main/java/com/yolo/keyborad/controller/UserController.java @@ -1,10 +1,13 @@ package com.yolo.keyborad.controller; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.bean.BeanUtil; import com.yolo.keyborad.common.BaseResponse; import com.yolo.keyborad.common.ResultUtils; 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.entity.KeyboardUser; import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO; import com.yolo.keyborad.service.IAppleService; import com.yolo.keyborad.service.UserService; @@ -14,6 +17,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -42,7 +46,7 @@ public class UserController { */ @PostMapping("/appleLogin") @Operation(summary = "苹果登录", description = "苹果登录接口") - @Parameter(name = "code",required = true,description = "苹果登录凭证",example = "123456") + @Parameter(name = "code", required = true, description = "苹果登录凭证", example = "123456") public BaseResponse appleLogin(@RequestBody AppleLoginReq appleLoginReq) throws Exception { return ResultUtils.success(appleService.login(appleLoginReq.getIdentityToken())); } @@ -56,7 +60,13 @@ public class UserController { @PostMapping("/login") @Operation(summary = "登录", description = "登录接口") - public BaseResponse login(@RequestBody UserLoginDTO userLoginDTO) { + public BaseResponse login(@RequestBody UserLoginDTO userLoginDTO) { return ResultUtils.success(userService.login(userLoginDTO)); } -} + + @PostMapping("/update") + @Operation(summary = "更新用户", description = "更新用户接口") + public BaseResponse update(@RequestBody KeyboardUserReq keyboardUserReq) { + return ResultUtils.success(userService.updateUserInfo(keyboardUserReq)); + } +} \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/mapper/KeyboardUserMapper.java b/src/main/java/com/yolo/keyborad/mapper/KeyboardUserMapper.java index 71f2608..bee92dc 100644 --- a/src/main/java/com/yolo/keyborad/mapper/KeyboardUserMapper.java +++ b/src/main/java/com/yolo/keyborad/mapper/KeyboardUserMapper.java @@ -9,4 +9,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yolo.keyborad.model.entity.KeyboardUser; public interface KeyboardUserMapper extends BaseMapper { + Integer updateByuid(KeyboardUser keyboardUser); } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/dto/user/KeyboardUserReq.java b/src/main/java/com/yolo/keyborad/model/dto/user/KeyboardUserReq.java new file mode 100644 index 0000000..113e07d --- /dev/null +++ b/src/main/java/com/yolo/keyborad/model/dto/user/KeyboardUserReq.java @@ -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; +} \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/service/UserService.java b/src/main/java/com/yolo/keyborad/service/UserService.java index 9911c88..5b557b0 100644 --- a/src/main/java/com/yolo/keyborad/service/UserService.java +++ b/src/main/java/com/yolo/keyborad/service/UserService.java @@ -1,6 +1,7 @@ package com.yolo.keyborad.service; 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.entity.KeyboardUser; import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO; @@ -16,4 +17,6 @@ public interface UserService extends IService { KeyboardUser createUserWithSubjectId(String sub); KeyboardUserRespVO login(UserLoginDTO userLoginDTO); + + Boolean updateUserInfo(KeyboardUserReq keyboardUser); } diff --git a/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java index 68bbf80..5d38175 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java @@ -5,10 +5,12 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.RandomUtil; 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.yolo.keyborad.common.ErrorCode; import com.yolo.keyborad.exception.BusinessException; 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.entity.KeyboardUser; import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO; @@ -62,4 +64,22 @@ public class UserServiceImpl extends ServiceImpl() + .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; + } } diff --git a/src/main/resources/mapper/KeyboardUserMapper.xml b/src/main/resources/mapper/KeyboardUserMapper.xml index 8b32d84..6f2c0be 100644 --- a/src/main/resources/mapper/KeyboardUserMapper.xml +++ b/src/main/resources/mapper/KeyboardUserMapper.xml @@ -23,4 +23,15 @@ id, "uid", nick_name, gender, avatar_url, created_at, updated_at, deleted, email, "status", "password", subject_id, email_verified + + + update keyboard_user + + nick_name = #{nickName}, + gender = #{gender}, + avatar_url = #{avatarUrl}, + email = #{email}, + + where uid = #{uid} + \ No newline at end of file