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

Step3 #358

Open
wants to merge 2 commits into
base: h3yon
Choose a base branch
from
Open

Step3 #358

wants to merge 2 commits into from

Conversation

h3yon
Copy link

@h3yon h3yon commented Dec 10, 2023

안녕하세요 3단계 PR 및 승인 요청드립니다!
1단계 코드리뷰 남겨주신 부분은 추후 수정해놓겠습니다~!
감사합니다

Copy link

@seokhong seokhong left a comment

Choose a reason for hiding this comment

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

희윤님, 3단계 미션 잘 구현하셨습니다. 👍
코멘트 조금 남겼습니다. 코멘트 확인 부탁드립니다. 🙂

import nextstep.courses.domain.session.Session;

import java.time.LocalDateTime;
import java.util.List;

public class Course {
public class Course extends BaseEntity {
private Long id;

Choose a reason for hiding this comment

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

idBaseEntity에 있으니 제거해도 괜찮지 않을까요?

}

public void decrease() {
this.remainCount--;
this.availableCount--;

Choose a reason for hiding this comment

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

availableCount이 총 수강 가능한 인원이라면 변하면 안 될 것 같아요. 원래 강의의 최대 수강 인원이 몇 명인지는 유지되어야 하지 않을까요?
remainCount와 수강 인원(Enrollment)가 중복이라서, remainCount 없이 Enrollment를 이용해도 되지 않을지 궁금해서 남긴 코멘트였습니다. :)

return enrollmentCount;
}

public void validateEnrollState(Payment payment) {

Choose a reason for hiding this comment

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

이 메서드는 검증을 하는 목적이 아니라, 수강 신청을 하는 것(enrollmentCount.decrease())을 목적으로 호출하는 메서드일 것 같아요.
메서드 이름을 변경해보면 어떨까요?

@@ -18,7 +20,32 @@ public boolean isFree() {
return fee == 0;
}

public static SessionFee ZERO() {

Choose a reason for hiding this comment

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

fee가 final 이라서 불변으로 관리되니, ZERO는 상수로 만들어서 하나의 객체를 재사용해보면 어떨까요?

return ps;
}, keyHolder);
Number key = keyHolder.getKey();
return key != null ? key.longValue() : -1;

Choose a reason for hiding this comment

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

KeyHolder를 활용한 id 반환 좋습니다. 👍
저장이 안 된 경우 -1을 반환하신 이유가 있을까요?
문제가 발생한 상황이라면 예외를 발생시키는 건 어떨까요?

return enrollmentRepository.save(enroll);
}

public Enrollment enroll(final Session session, final NsUser user, final Payment payment) {

Choose a reason for hiding this comment

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

20행의 enroll 메서드에서만 사용되는 메서드이니, private 접근 제어자를 사용해보면 어떨까요?


@Service
public class EnrollmentService {

Choose a reason for hiding this comment

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

메서드에 @Transactional을 누락할 때 발생할 수 있는 문제를 방지하기 위해 클래스에도 @Transactional을 설정해보면 어떨까요?



public Enrollment(final Long nsUserId, final Long sessionId) {
this(null, nsUserId, sessionId, LocalDateTime.now(), null);

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