han-note项目初始化完毕!

- 邮箱验证码接口完成
This commit is contained in:
Hanserwei
2025-09-30 15:36:31 +08:00
parent fe12d54c92
commit 765a1a7e4f
17 changed files with 632 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
package com.hanserwei.hannote.auth.service;
import com.hanserwei.framework.common.response.Response;
import com.hanserwei.hannote.auth.model.vo.SendVerificationCodeReqVO;
public interface VerificationCodeService {
/**
* 发送短信验证码
*
* @param sendVerificationCodeReqVO 发送验证码VO
* @return 返回响应
*/
Response<?> send(SendVerificationCodeReqVO sendVerificationCodeReqVO);
}

View File

@@ -0,0 +1,57 @@
package com.hanserwei.hannote.auth.service.impl;
import cn.hutool.core.util.RandomUtil;
import com.hanserwei.framework.common.exception.ApiException;
import com.hanserwei.framework.common.response.Response;
import com.hanserwei.hannote.auth.constant.RedisKeyConstants;
import com.hanserwei.hannote.auth.enums.ResponseCodeEnum;
import com.hanserwei.hannote.auth.model.vo.SendVerificationCodeReqVO;
import com.hanserwei.hannote.auth.service.VerificationCodeService;
import com.hanserwei.hannote.auth.utils.MailHelper;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@RequiredArgsConstructor
@Service
@Slf4j
public class VerificationCodeServiceImpl implements VerificationCodeService {
private final RedisTemplate<String, Object> redisTemplate;
private final MailHelper mailHelper;
@Resource(name = "authTaskExecutor")
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
/**
* 发送短信验证码!
*
* @param sendVerificationCodeReqVO 发送验证码VO
* @return 响应
*/
@Override
public Response<?> send(SendVerificationCodeReqVO sendVerificationCodeReqVO) {
// 邮箱
String email = sendVerificationCodeReqVO.getEmail();
//构建Redis的Key
String codeKey = RedisKeyConstants.buildVerificationCodeKey(email);
// 判断是否发送!
Boolean hasKey = redisTemplate.hasKey(codeKey);
if (hasKey) {
//若之前发送的验证码未过期,则提示发送频繁
throw new ApiException(ResponseCodeEnum.VERIFICATION_CODE_SEND_FREQUENTLY);
}
//生成六位数随机验证码
String verificationCode = RandomUtil.randomNumbers(6);
threadPoolTaskExecutor.submit(() -> mailHelper.sendMail(verificationCode, email));
log.info("==> 邮箱: {}, 已发送验证码:【{}】", email, verificationCode);
// 存储验证码到 redis, 并设置过期时间为 3 分钟
redisTemplate.opsForValue().set(codeKey, verificationCode, 3, TimeUnit.MINUTES);
return Response.success();
}
}