-
Notifications
You must be signed in to change notification settings - Fork 40
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
base: nyeroni
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요! 이번 미션도 수고 많으셨습니다😊
저와 다르게 진행한 점이 많아서 여러 내용 찾아 보게 되어 공부가 많이 된 것 같아요!
예린님 코드 보면서 많이 배워갑니다.
특히 저번 피드백에서 언급되었던 점들이 많이 녹아있어 제가 공부해보고 적용해야할 점들이 많이 보인 것 같아요😊 😊
저에게 이번 미션이 많이 어려웠어요 예린님은 어떠셨나요?
그래서 리뷰도 코드를 어떤 의도로 작성하셨는지 제가 궁금한 점 위주로 진행한 것 같네요 !
얼마 안남은 미션들 파이팅합시다👍👍
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; | ||
|
||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
of 매소드를 통해서 예약 및 예약 대기를 한번에 myReservationResponses
로 반환하는 점이 인상깊어요. 배워갑니다!
70번째 줄에 생긴 공백 지워도 될 것 같습니다!
이외에도 불필요한 줄바꿈 공백들이 보이는데 지우면 좋을 것 같습니다!
@GetMapping("/reservations-mine") | ||
public List<MyReservationResponse> myReservation( | ||
@LoginUser LoginMember loginMember | ||
) { | ||
List<ReservationResponse> reservationResponses = reservationService.findAllByMemberName(loginMember.getName()); | ||
return reservationService.findMyReservationsByMemberName(loginMember.getName()); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@LoginUser
라는 어노테이션은 처음 접해보는데 @LoginUser
를 사용하게된 이유가 있을까요? 궁금합니다!
Optional<Member> findByEmailAndPassword(String email, String password); | ||
Optional<Member> findByName(String name); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
지난 피드백 이후로 Optional
에 대해서 고민해보고 있는데, 예린님 코드에서 잘 구현되어있어 어떤식으로 적용 해야 하는지 배워갑니다!
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Theme
과 Time
에 대해서도 Optional
을 사용하셨는데 여기서도 사용하신 이유가 뭘까요? 궁금해요!
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()); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 waiting
을 구현하면서 복잡해지고 코드가 지저분해졌는데 예린님의 save
메서드는 이해하기 쉬웠던 것 같아요.
전체적으로 구조를 잘 나누셔서 save
가 깔끔하고 직관적인 메서드가 된 것 같습니다.
코드 구조를 먼저 생각하면서 짜야한다는 것을 다시 느꼈어요👍👍
There was a problem hiding this comment.
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}")
만 구현 되어있어도 예약대기까지 삭제되는지 궁금합니다!!
4,5,6단계 미션
안녕하세요! 늦게 제출하게 돼서 죄송합니다 ㅎㅎ
부족한 부분이 있다면 얼마든지 말해주세요!!
Waiting 부분이 가장 어려워서 테스트엔 성공했긴 한데 잘못된 것이 있다면 말씀해주세요 !! 감사합니다 :)