Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

강원대 BE_박지희 4주차 과제 (1단계) #228

Open
wants to merge 20 commits into
base: peacefullyquietly
Choose a base branch
from

Conversation

peacefullyquietly
Copy link

@peacefullyquietly peacefullyquietly commented Jul 18, 2024

변경 사항

  • memberController 내에 로직 작성을 지양하라고 하셔서 수정해보았습니다
  • 조원분의 조언에 따라 DTO 변환 로직은 서비스가 아닌 엔티티의 책임이라는 점을 인지하고, 단일 책임 원칙을 적용하여 WishListService와 ProductService 내의 toDTO 메서드를 분리하여 각각의 Entity 클래스 내로 이동하였습니다

궁금한점

  • 단일 책임 원칙에 따라 분리한 메서드가 적절하게 적용되었는지 궁금합니다!
  • 현재 제 코드는 MemberServiceStatus.class와 같이 HTTP 상태 값을 반환하는 방식과 throw를 사용하여 예외를 던지는 방식을 혼용하고 있습니다.
  • 예를 들어, authenticateToken 메서드에서는 예외를 던지고 있습니다
 public MemberEntity authenticateToken(MemberDTO memberDTO) {
        MemberEntity foundMember = memberRepository.findByEmail(memberDTO.getEmail());

        if (foundMember == null || !memberDTO.getPassword().equals(foundMember.getPassword())) {
            throw new RuntimeException("Invalid email or password");
        }

        return foundMember;
    }
  • 반면, save 메서드에서는 상태 코드를 반환하고 있습니다.
  public MemberServiceStatus save(MemberDTO memberDTO) {
        if (existsByEmail(memberDTO.getEmail())) {
            return MemberServiceStatus.EMAIL_ALREADY_EXISTS;
        }

        // DTO to Entity
        MemberEntity memberEntity = new MemberEntity(memberDTO.getEmail(), memberDTO.getPassword());
        memberRepository.save(memberEntity);
        return MemberServiceStatus.SUCCESS;
    }
  • 두 가지 방식 중 어떤 것이 더 적절한지, 그리고 각각의 방법이 어떤 상황에서 더 효율적인지 궁금합니다.

@jaymarystella
Copy link

public MemberServiceStatus save(MemberDTO memberDTO) {
if (existsByEmail(memberDTO.getEmail())) {
return MemberServiceStatus.EMAIL_ALREADY_EXISTS;
}

    // DTO to Entity
    MemberEntity memberEntity = new MemberEntity(memberDTO.getEmail(), memberDTO.getPassword());
    memberRepository.save(memberEntity);
    return MemberServiceStatus.SUCCESS;
}

질문주신부분입니다.
일단은 비교가 어려울것같은게 MemberServiceStatus는 없애주시는게 나을것같습니다. HTTP상태코드를 공부해보셔서 아시겠지만 저 정보는굳이 필요없습니다.

public enum MemberServiceStatus {
    SUCCESS,
    EMAIL_ALREADY_EXISTS,
    NOT_FOUND,
    UNAUTHORIZED
}

정의주신부분을보면 상태코드와 중복된값이라 따로 내려주실필요는 없습니다. 일단 수정하고나서 다시 살펴보죠!

Copy link

@jaymarystella jaymarystella left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요.
코멘트 남겨주신부분 참고하셔서 반영해주시면 감사하겠습니다.


@NotBlank(message = "카테고리 이름은 필수 입력 항목입니다.")
private String name;
private String color;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저장될때는 nullable하지 않게 되어있는데 앞에서도 검증이 필요할것같습니다.

Comment on lines 44 to 57
public CategoryDTO updateCategory(Long id, CategoryDTO categoryDTO) {
CategoryEntity category = categoryRepository.findById(id)
.orElseThrow(() -> new RuntimeException("카테고리를 찾을 수 없습니다"));

CategoryEntity updatedCategory = new CategoryEntity(
category.getId(),
categoryDTO.getName(),
categoryDTO.getColor(),
categoryDTO.getImageUrl(),
categoryDTO.getDescription()
);

updatedCategory = categoryRepository.save(updatedCategory);
return updatedCategory.toDTO(updatedCategory);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

메서드길이를 줄일수있는 방법을 고민해보아요

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

로직이 좀 이상한데 id를 가져와서 조회한후에 다른카테고리가 업데이트될수도있을거같은데요, 문제확인주시고 업데이트하는 대상에게 update메서드를 따로 만드는방식으로도 개선을 해주시면 될것같습니다.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 알겠습니다!

@@ -21,7 +21,7 @@ public MemberEntity authenticateToken(MemberDTO memberDTO) {
MemberEntity foundMember = memberRepository.findByEmail(memberDTO.getEmail());

if (foundMember == null || !memberDTO.getPassword().equals(foundMember.getPassword())) {
return null;
throw new RuntimeException("Invalid email or password");

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정의된 예외를 사용해보는건 어떨까요?


@RestController
@RequestMapping("/api/category")
public class CategoryController {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

상품추가할때 바로 카테고리를 지정해야하는 요구사항이 있는것으로 알고있는데요, 상품쪽 controller에 수정이 필요할것같습니다.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 수정해보겠습니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants