fix(character): 防止用户重复添加相同键盘人设

在添加人设前检查是否已存在,若存在则抛REPEATEDLY_ADDING_CHARACTER异常;
同时移除实体中冗余sort字段,并统一发送验证码DTO为SendMailDTO。
This commit is contained in:
2025-12-04 18:31:44 +08:00
parent e18274790e
commit fa544a08a9
6 changed files with 17 additions and 12 deletions

View File

@@ -35,7 +35,8 @@ public enum ErrorCode {
CONFIRM_PASSWORD_NOT_MATCH(50005,"重复密码不匹配" ),
USER_CHARACTER_ADD_ERROR(50006,"添加用户键盘字符失败" ),
USER_CHARACTER_DEL_ERROR(50007, "删除用户人设失败"),
VERIFY_CODE_ERROR(50008, "验证码错误");
VERIFY_CODE_ERROR(50008, "验证码错误"),
REPEATEDLY_ADDING_CHARACTER(50009, "重复添加键盘人设");
/**
* 状态码
*/

View File

@@ -6,6 +6,7 @@ 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.SendMailDTO;
import com.yolo.keyborad.model.dto.user.UserLoginDTO;
import com.yolo.keyborad.model.dto.user.UserRegisterDTO;
import com.yolo.keyborad.model.entity.KeyboardUser;
@@ -89,8 +90,8 @@ public class UserController {
@PostMapping("/sendVerifyMail")
@Operation(summary = "发送验证码",description = "发送验证码接口")
public BaseResponse<Boolean> sendVerifyMail(@RequestBody UserRegisterDTO userRegisterDTO) {
userService.sendVerifyMail(userRegisterDTO);
public BaseResponse<Boolean> sendVerifyMail(@RequestBody SendMailDTO mailDTO) {
userService.sendVerifyMail(mailDTO);
return ResultUtils.success(true);
}

View File

@@ -47,7 +47,4 @@ public class KeyboardUserCharacter {
@Schema(description = "emoji")
private String emoji;
@TableField(value = "sort")
@Schema(description = "展示顺序")
private List<Integer> sort;
}

View File

@@ -2,6 +2,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.SendMailDTO;
import com.yolo.keyborad.model.dto.user.UserLoginDTO;
import com.yolo.keyborad.model.dto.user.UserRegisterDTO;
import com.yolo.keyborad.model.entity.KeyboardUser;
@@ -23,5 +24,5 @@ public interface UserService extends IService<KeyboardUser> {
Boolean userRegister(UserRegisterDTO userRegisterDTO);
void sendVerifyMail(UserRegisterDTO userRegisterDTO);
void sendVerifyMail(SendMailDTO userRegisterDTO);
}

View File

@@ -104,7 +104,12 @@ public class KeyboardCharacterServiceImpl extends ServiceImpl<KeyboardCharacterM
KeyboardUserCharacter keyboardUserCharacter = BeanUtil.copyProperties(addDTO, KeyboardUserCharacter.class);
long userId = StpUtil.getLoginIdAsLong();
keyboardUserCharacter.setUserId(userId);
KeyboardUserCharacter alreadyExistsCharacter = keyboardUserCharacterMapper.selectOne(new LambdaQueryWrapper<KeyboardUserCharacter>()
.eq(KeyboardUserCharacter::getCharacterId, addDTO.getCharacterId())
.eq(KeyboardUserCharacter::getDeleted, false));
if (alreadyExistsCharacter != null){
throw new BusinessException(ErrorCode.REPEATEDLY_ADDING_CHARACTER);
}
int insert = keyboardUserCharacterMapper.insert(keyboardUserCharacter);
if (insert != 1) {
log.error("用户人设添加失败, userId={}");

View File

@@ -11,6 +11,7 @@ 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.SendMailDTO;
import com.yolo.keyborad.model.dto.user.UserLoginDTO;
import com.yolo.keyborad.model.dto.user.UserRegisterDTO;
import com.yolo.keyborad.model.entity.KeyboardUser;
@@ -73,7 +74,6 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
KeyboardUser keyboardUser = keyboardUserMapper.selectOne(
new LambdaQueryWrapper<KeyboardUser>()
.eq(KeyboardUser::getEmail, userLoginDTO.getMail())
.eq(KeyboardUser::getPassword, userLoginDTO.getPassword())
.eq(KeyboardUser::getStatus, false));
if (keyboardUser == null) {
throw new BusinessException(ErrorCode.USER_NOT_FOUND);
@@ -126,9 +126,9 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
}
@Override
public void sendVerifyMail(UserRegisterDTO userRegisterDTO) {
public void sendVerifyMail(SendMailDTO mailDTO) {
int code = RandomUtil.randomInt(100000, 999999);
redisUtil.setEx("user:"+userRegisterDTO.getMailAddress(), String.valueOf(code),600, TimeUnit.SECONDS);
sendMailUtils.sendEmail(null,userRegisterDTO.getMailAddress(),code);
redisUtil.setEx("user:"+mailDTO.getMailAddress(), String.valueOf(code),600, TimeUnit.SECONDS);
sendMailUtils.sendEmail(null,mailDTO.getMailAddress(),code);
}
}