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

[Spring Data JPA] 신예린 미션 제출합니다. #58

Open
wants to merge 18 commits into
base: nyeroni
Choose a base branch
from

Conversation

nyeroni
Copy link

@nyeroni nyeroni commented Jul 2, 2024

4,5,6단계 미션

안녕하세요! 늦게 제출하게 돼서 죄송합니다 ㅎㅎ
부족한 부분이 있다면 얼마든지 말해주세요!!

Waiting 부분이 가장 어려워서 테스트엔 성공했긴 한데 잘못된 것이 있다면 말씀해주세요 !! 감사합니다 :)

Copy link

@day024 day024 left a comment

Choose a reason for hiding this comment

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

안녕하세요! 이번 미션도 수고 많으셨습니다😊

저와 다르게 진행한 점이 많아서 여러 내용 찾아 보게 되어 공부가 많이 된 것 같아요!
예린님 코드 보면서 많이 배워갑니다.
특히 저번 피드백에서 언급되었던 점들이 많이 녹아있어 제가 공부해보고 적용해야할 점들이 많이 보인 것 같아요😊 😊

저에게 이번 미션이 많이 어려웠어요 예린님은 어떠셨나요?
그래서 리뷰도 코드를 어떤 의도로 작성하셨는지 제가 궁금한 점 위주로 진행한 것 같네요 !
얼마 안남은 미션들 파이팅합시다👍👍

Comment on lines +51 to +71
public static List<MyReservationResponse> of(List<Reservation> reservations, List<WaitingWithRank> waitingWithRanks) {
List<MyReservationResponse> myReservationResponses = reservations.stream()
.map(reservation -> new MyReservationResponse(
reservation.getId(),
reservation.getTheme().getName(),
reservation.getDate(),
reservation.getTime().getValue(),
"예약"))
.collect(Collectors.toList());

waitingWithRanks.stream().map(reservation -> new MyReservationResponse(
reservation.getWaiting().getId(),
reservation.getWaiting().getTheme().getName(),
reservation.getWaiting().getDate(),
reservation.getWaiting().getTime().getValue(),
String.format("%d번째 예약대기", reservation.getRank() + 1)))
.forEach(myReservationResponses::add);

return myReservationResponses;

}
Copy link

Choose a reason for hiding this comment

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

of 매소드를 통해서 예약 및 예약 대기를 한번에 myReservationResponses로 반환하는 점이 인상깊어요. 배워갑니다!
70번째 줄에 생긴 공백 지워도 될 것 같습니다!
이외에도 불필요한 줄바꿈 공백들이 보이는데 지우면 좋을 것 같습니다!

Comment on lines +26 to +32
@GetMapping("/reservations-mine")
public List<MyReservationResponse> myReservation(
@LoginUser LoginMember loginMember
) {
List<ReservationResponse> reservationResponses = reservationService.findAllByMemberName(loginMember.getName());
return reservationService.findMyReservationsByMemberName(loginMember.getName());
}
Copy link

Choose a reason for hiding this comment

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

@LoginUser 라는 어노테이션은 처음 접해보는데 @LoginUser를 사용하게된 이유가 있을까요? 궁금합니다!

Comment on lines +8 to +10
Optional<Member> findByEmailAndPassword(String email, String password);
Optional<Member> findByName(String name);
}
Copy link

Choose a reason for hiding this comment

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

지난 피드백 이후로 Optional에 대해서 고민해보고 있는데, 예린님 코드에서 잘 구현되어있어 어떤식으로 적용 해야 하는지 배워갑니다!

Copy link

Choose a reason for hiding this comment

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

member, reservation 등의 패키지에서 JPA전환, 엔티티 매핑, 연관관계 매핑이 잘 되어있는 것 같습니다.

@@ -2,11 +2,8 @@ spring.sql.init.encoding=utf-8
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:mem:database

spring.profiles.include=oauth
Copy link

Choose a reason for hiding this comment

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

공통 피드백이였던 profiles을 사용하셨군요. 확실히 보안면에서 더 좋은 것 같네요!

import java.util.Optional;

public interface ThemeRepository extends JpaRepository<Theme, Long> {
Optional<Theme> findByName(String name);
Copy link

Choose a reason for hiding this comment

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

ThemeTime 에 대해서도 Optional을 사용하셨는데 여기서도 사용하신 이유가 뭘까요? 궁금해요!

Comment on lines +25 to +34
public WaitingResponse save(WaitingRequest waitingRequest) {

Time time = timeRepository.findById(waitingRequest.getTime()).orElseThrow(() -> new IllegalArgumentException("존재하지 않는 시간입니다."));
Theme theme = themeRepository.findById(waitingRequest.getTheme()).orElseThrow(() -> new IllegalArgumentException("존재하지 않는 테마입니다."));
Member member = memberRepository.findByName(waitingRequest.getName()).orElseThrow(() -> new IllegalArgumentException("존재하지 않는 회원입니다."));
Waiting waiting = new Waiting(waitingRequest.getDate(), time, theme, member);
waitingRepository.save(waiting);

return new WaitingResponse(waiting.getId(), waiting.getMember().getName(), waiting.getTheme().getName(), waiting.getDate(), waiting.getTime().getValue());
}
Copy link

Choose a reason for hiding this comment

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

저는 waiting을 구현하면서 복잡해지고 코드가 지저분해졌는데 예린님의 save 메서드는 이해하기 쉬웠던 것 같아요.
전체적으로 구조를 잘 나누셔서 save가 깔끔하고 직관적인 메서드가 된 것 같습니다.
코드 구조를 먼저 생각하면서 짜야한다는 것을 다시 느꼈어요👍👍

Copy link

Choose a reason for hiding this comment

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

저는 WaitingController에서 대기예약을 삭제하는 @DeleteMapping("/waitings/{id}")를 구현하였습니다.
또한 Reservation에서도 @DeleteMapping("/reservations/{id}") 를 작성했었는데요.

저는 지금 삭제기능에 대한 오류를 겪고있어 제 코드로 확인이 불가능하여 궁금한 점 하나 물어봅니다 ㅎㅎ.
둘중에 @DeleteMapping("/reservations/{id}")만 구현 되어있어도 예약대기까지 삭제되는지 궁금합니다!!

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