Skip to content

Commit

Permalink
refactor: 회원 도메인의 사용자에게 반환할 에러 메시지에 대한 책임을 사용자 정의 예외로 이동 (#106)
Browse files Browse the repository at this point in the history
  • Loading branch information
scv1702 authored Aug 2, 2024
1 parent 3025939 commit 74c6393
Show file tree
Hide file tree
Showing 10 changed files with 71 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import es.princip.getp.domain.member.command.domain.service.ProfileImageService;
import es.princip.getp.domain.member.command.domain.service.ServiceTermAgreementService;
import es.princip.getp.domain.member.command.exception.AlreadyUsedEmailException;
import jakarta.persistence.EntityNotFoundException;
import es.princip.getp.domain.member.command.exception.NotFoundMemberException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
Expand All @@ -27,9 +27,7 @@ public class MemberService {
private final MemberRepository memberRepository;

private Member findById(final Long memberId) {
return memberRepository.findById(memberId).orElseThrow(
() -> new EntityNotFoundException("해당 회원은 존재하지 않습니다.")
);
return memberRepository.findById(memberId).orElseThrow(NotFoundMemberException::new);
}

/**
Expand All @@ -52,7 +50,7 @@ public Long create(final CreateMemberCommand command) {
* 회원 정보를 수정한다.
*
* @param command 회원 정보 수정 명령
* @throws EntityNotFoundException 해당 회원이 존재하지 않는 경우
* @throws NotFoundMemberException 해당 회원이 존재하지 않는 경우
*/
@Transactional
public void update(final UpdateMemberCommand command) {
Expand All @@ -65,7 +63,7 @@ public void update(final UpdateMemberCommand command) {
*
* @param memberId 회원 식별자
* @param image 프로필 이미지
* @throws EntityNotFoundException 해당 회원이 존재하지 않는 경우
* @throws NotFoundMemberException 해당 회원이 존재하지 않는 경우
* @return 수정된 프로필 이미지의 URI
*/
@Transactional
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package es.princip.getp.domain.member.command.exception;

import es.princip.getp.infra.exception.BusinessLogicException;
import es.princip.getp.infra.exception.ErrorDescription;

public class AlreadyUsedEmailException extends BusinessLogicException {

private static final String code = "ALREADY_USED_EMAIL";
private static final String message = "이미 사용 중인 이메일입니다.";

public AlreadyUsedEmailException() {
super("이미 사용 중인 이메일입니다.");
super(ErrorDescription.of(code, message));
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package es.princip.getp.domain.member.command.exception;

import es.princip.getp.infra.exception.BusinessLogicException;
import es.princip.getp.infra.exception.ApiErrorException;
import es.princip.getp.infra.exception.ErrorDescription;
import org.springframework.http.HttpStatus;

public class FailedToSaveProfileImageException extends BusinessLogicException {
public class FailedToSaveProfileImageException extends ApiErrorException {

private static final String code = "FAILED_TO_SAVE_PROFILE_IMAGE";
private static final String message = "프로필 사진 저장에 실패했습니다. 다시 시도해주세요.";

public FailedToSaveProfileImageException() {
super("프로필 이미지를 저장하는데 실패했습니다.");
super(HttpStatus.INTERNAL_SERVER_ERROR, ErrorDescription.of(code, message));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package es.princip.getp.domain.member.command.exception;

import es.princip.getp.infra.exception.ErrorDescription;
import es.princip.getp.infra.exception.NotFoundException;

public class NotFoundMemberException extends NotFoundException {

private static final String code = "NOT_FOUND_MEMBER";
private static final String message = "존재하지 않는 회원입니다.";

public NotFoundMemberException() {
super(ErrorDescription.of(code, message));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import es.princip.getp.domain.serviceTerm.domain.ServiceTermChecker;
import es.princip.getp.domain.serviceTerm.domain.ServiceTermRepository;
import es.princip.getp.domain.serviceTerm.domain.ServiceTermTag;
import jakarta.persistence.EntityNotFoundException;
import es.princip.getp.domain.serviceTerm.exception.NotFoundServiceTermException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

Expand All @@ -33,7 +33,7 @@ public void agreeServiceTerms(final Member member, final List<ServiceTermAgreeme

private ServiceTermAgreement createServiceTermAgreement(final ServiceTermTag tag, final boolean agreed) {
if (!serviceTermRepository.existsByTag(tag)) {
throw new EntityNotFoundException("해당 서비스 약관이 존재하지 않습니다.");
throw new NotFoundServiceTermException();
}
return new ServiceTermAgreement(tag, agreed);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import es.princip.getp.domain.serviceTerm.domain.ServiceTermRepository;
import es.princip.getp.domain.serviceTerm.domain.ServiceTermTag;
import es.princip.getp.domain.serviceTerm.dto.reqeust.ServiceTermRequest;
import es.princip.getp.domain.serviceTerm.exception.DuplicatedTagException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -19,7 +20,7 @@ public class ServiceTermService {
public ServiceTerm create(ServiceTermRequest request) {
ServiceTermTag tag = ServiceTermTag.of(request.tag());
if (serviceTermRepository.existsByTag(tag)) {
throw new IllegalArgumentException("ServiceTerm already exists");
throw new DuplicatedTagException();
}
ServiceTerm serviceTerm = new ServiceTerm(tag, request.required(), request.revocable());
return serviceTermRepository.save(serviceTerm);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package es.princip.getp.domain.serviceTerm.exception;

import es.princip.getp.infra.exception.BusinessLogicException;
import es.princip.getp.infra.exception.ErrorDescription;

public class DuplicatedTagException extends BusinessLogicException {

private static final String code = "DUPLICATED_TAG";
private static final String message = "중복된 태그입니다.";

public DuplicatedTagException() {
super(ErrorDescription.of(code, message));
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package es.princip.getp.domain.serviceTerm.exception;

import es.princip.getp.infra.exception.BusinessLogicException;
import es.princip.getp.infra.exception.ErrorDescription;

public class NotAgreedAllRequiredServiceTermException extends BusinessLogicException {

private static final String code = "NOT_AGREED_ALL_REQUIRED_SERVICE_TERM";
private static final String message = "모든 필수 서비스 약관에 동의하지 않았습니다.";

public NotAgreedAllRequiredServiceTermException() {
super("모든 필수 서비스 약관에 동의하지 않았습니다.");
super(ErrorDescription.of(code, message));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package es.princip.getp.domain.serviceTerm.exception;

import es.princip.getp.infra.exception.ErrorDescription;
import es.princip.getp.infra.exception.NotFoundException;

public class NotFoundServiceTermException extends NotFoundException {

private static final String code = "NOT_FOUND_SERVICE_TERM";
private static final String message = "존재하지 않는 서비스 약관입니다.";

public NotFoundServiceTermException() {
super(ErrorDescription.of(code, message));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import es.princip.getp.domain.serviceTerm.domain.ServiceTermRepository;
import es.princip.getp.domain.serviceTerm.domain.ServiceTermTag;
import es.princip.getp.domain.serviceTerm.exception.NotAgreedAllRequiredServiceTermException;
import jakarta.persistence.EntityNotFoundException;
import es.princip.getp.domain.serviceTerm.exception.NotFoundServiceTermException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

Expand All @@ -19,9 +19,8 @@ public class ServiceTermCheckerImpl implements ServiceTermChecker {
private final ServiceTermRepository serviceTermRepository;

private ServiceTerm findByTag(final ServiceTermTag tag) {
return serviceTermRepository.findByTag(tag).orElseThrow(
() -> new EntityNotFoundException("해당 서비스 약관이 존재하지 않습니다.")
);
return serviceTermRepository.findByTag(tag)
.orElseThrow(NotFoundServiceTermException::new);
}

@Override
Expand Down

0 comments on commit 74c6393

Please sign in to comment.