EmailVerificationService.java

package qwerty.chaekit.service.member.verification;

import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import qwerty.chaekit.global.enums.ErrorCode;
import qwerty.chaekit.global.exception.BadRequestException;
import qwerty.chaekit.service.util.EmailNotificationService;

import java.util.concurrent.TimeUnit;

@Service
@RequiredArgsConstructor
public class EmailVerificationService {
    private final RedisTemplate<String, String> redisTemplate;
    private final EmailNotificationService emailService;

    public String sendVerificationCode(String email) {
        String verificationCode = generateVerificationCode();
        // Redis에 인증 코드 저장 (30분 유효)
        redisTemplate.opsForValue().set(email, verificationCode, 30, TimeUnit.MINUTES);  // 10분 후 만료
        // 이메일로 인증 코드 발송
        emailService.sendVerificationEmail(email, verificationCode);
        return "[테스트용 응답] 이메일: " + email + ", 코드: " + verificationCode;
    }

    public String processVerification(String email, String code) {
        if(verifyCode(email, code)) {
            return "테스트: 인증 성공";
        } else {
            throw new BadRequestException(ErrorCode.EMAIL_VERIFICATION_FAILED);
        }
    }

    public boolean verifyCode(String email, String code) {
        // Redis에서 이메일 인증 코드 조회
        String storedCode = redisTemplate.opsForValue().get(email);
        return storedCode != null && storedCode.equals(code);
    }
    public void deleteVerificationCode(String email) {
        redisTemplate.delete(email);
    }

    // 임의의 6자리 인증 코드 생성
    private String generateVerificationCode() {
        int code = (int) (Math.random() * 900000) + 100000;  // 6자리*
        return String.valueOf(code);
    }
}