MemberJoinHelper.java

package qwerty.chaekit.service.member;

import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import qwerty.chaekit.domain.member.Member;
import qwerty.chaekit.domain.member.MemberRepository;
import qwerty.chaekit.domain.member.enums.Role;
import qwerty.chaekit.global.enums.ErrorCode;
import qwerty.chaekit.global.exception.BadRequestException;
import qwerty.chaekit.service.member.verification.EmailVerificationService;
import qwerty.chaekit.service.util.FileService;

@Service
@Transactional
@RequiredArgsConstructor
public class MemberJoinHelper {
    private final MemberRepository memberRepository;
    private final EmailVerificationService emailVerificationService;
    private final BCryptPasswordEncoder bCryptPasswordEncoder;
    private final FileService fileService;

    public Member saveMemberWithVerificationCode(String email, String password, Role role, String verificationCode) {
        validateVerificationCode(email, verificationCode);
        Member savedMember = saveMember(email, password, role);
        emailVerificationService.deleteVerificationCode(email);
        return savedMember;
    }

    public Member saveMember(String email, String password, Role role) {
        validateEmail(email);
        return memberRepository.save(Member.builder()
                .email(email)
                .password(bCryptPasswordEncoder.encode(password))
                .role(role)
                .build());
    }

    public String uploadProfileImage(MultipartFile profileImage) {
        return fileService.uploadProfileImageIfPresent(profileImage);
    }

    public String convertToPublicImageURL(String fileKey) {
        return fileService.convertToPublicImageURL(fileKey);
    }

    private void validateEmail(String email) {
        if (memberRepository.existsByEmail(email)) {
            throw new BadRequestException(ErrorCode.MEMBER_ALREADY_EXISTS);
        }
    }
    private void validateVerificationCode(String email, String verificationCode) {
        if (!emailVerificationService.verifyCode(email, verificationCode)) {
            throw new BadRequestException(ErrorCode.EMAIL_VERIFICATION_FAILED);
        }
    }
}