이번 프로젝트는 백엔드 기술에 집중해 보고자 화면에서 호출할 때 사용할 수 있는 RESTful API만만들었다.
주제선정: 테이블을 20개 이상 구성해 보라는 조건이 있어서 많은 테이블을 구성할 수 있는 것을 생각해 보다 숙박업소(그 중 여기어때 참고)를 만들어보기로 했다.
테이블을 나누고 4명 분으로 역할을 나눈 후 각자 하고 싶은 분야를 맡았다.
내가 맡은 부분은 reservation과 review.
아직 CRUD도 혼자서 작성해본 적이 많지 않아서 이정도 양이 내겐 아주 적합하다 생각이 들었다.
(원래 세가지 였지만 지금 진행하는 프로젝트에서 api로 구현하기에 어려움이 있어 빼기로 했다.) 빠르게 완성 된다면 다른 부분도 더 추가 하면 되는 것이니 첫 시작을 너무 크게 맡지 않아서 부담이 덜 되었고 이번에는 무엇을 해야할지를 알겠어서 자신있게? 시작할 수 있었다.
그동안 C만 열심히 연습했는데 이젠 RUD를 해내야만 했다.
그런데 어디서부터 시작을 해야 하는가~??
내가 맡은 부분 => reservation, review, payment
내가 하고싶은 토탈금액은 roomPrice 숙박 일.
고민2 부분에 살짝 이어서 '23.08.12 ~ 23.08.15' 라고 들어간다면 이 부분에서 숫자3이 나오고 여기에
roomPrice를 가져와서 곱해줘야 한다.
==> 강사님께 이렇게도 할 수 있는지 물어보니 가능하다고 했다.
대신 밀리세컨드로 나오니까 1000으로 나누고 60 *24 해줘야한다고~
(이 부분도 이 때 까지는 잘 모르겠었어서 우선 구현할 때 다시~ 하고 지나갔다.)
먼저 결론을 말하자면 구현해보니 그냥 3을 뽑아낼 수 있어서 위와 같이 하지는 않았다!
==> 이렇게 어떻게 해야 할지 생각하다가 시작도 못하고 있는 것 같아서 우선 CRUD부터 해보기로 했다.
이번 프로젝트를 회고를 하면서 내가 했던 모든것을 담고 싶지만 여기에 코드까지 모두 넣기에는 너무 복잡할 듯 하여 코드에 대한 것은 따로 빼서 작성해봤다.
새로 알게 된 Link도 사용해볼겸~🤗 (코드Link는 맨아래에~)
@GetMapping("/price")
public void price() {
Reservation byId = reservationService.findById(1L);
System.out.println(ChronoUnit.DAYS.between(byId.getCheckInDate(), byId.getCheckOutDate()));
}
이렇게 test를 해본 후 실제 Service에 넣은 코드(더 자세한건 reservation 참고.)
double totalPrice =
ChronoUnit.DAYS.between(request.getCheckInDate(), request.getCheckOutDate()) * room.getPrice();
하면 안되는 실수..^-^
double testPrice = ChronoUnit.DAYS.between(request.getCheckInDate(), request.getCheckOutDate());
double totalPrice = testPrice * room.getPrice();
System.out.println();
security를 사용해서 로그인 시 토근을 넣어줘야 한다. (참고* 403에러는 토큰에러다.)
➡️ page로 만들었다. 페이지를 따로 지정하지 않으면 default로 10개의 예약까지 보이도록 했다.
➡️ default값을 3으로 줄여본 후 다시 Get을 해보면
➡️ 3개만 나오는걸 볼 수 있다.
➡️ page와 size를 직접 지정해주면 원하는 페이지만 열어서 볼 수 있다. (*참고- 0page부터 시작한다.)
펼쳐보면 유저 정보와 예약을 확인할 수 있다.
password는 보이게 하면 안된다! 이거는 최종본을 합치기 전이라 password를 수정하기 전꺼여서 나온다..😗
➡️ 체크인 -8월 5일 체크아웃 -8월 17 => 17일 숙박.
➡️ room가격 - 예약시 6번room을 선택 -> 1박당 15000원.
➡️ 17일 * 15000 = 2,550,000 잘 나온다~!
➡️ 주석을 바꿔본 후 이름으로 예약 찾기
✅ findAll과 findName의 주석을 모두 풀면 에러가 난다!
err - Ambiguous mapping. Cannot map 'reservationController' method
✅ findName만 가능할 떄는 전체 예약을 한번에 볼 수 없다. 이름 검색으로만 가능.
➡️ 둘 다 다용하고 싶다면 query dsl을 사용해야함! (시간이을 내서 한번 도전해 보려 생각중)
➡️ 내 코드만 완성하고 돌릴 때는 분명히 잘 나왔는데 조원들과 합치고나서 getAll이 되지 않았다.
쿼리는 나가는데 body에는 아무것도 찍히지 않음. 왜지?????
➡️ 디버깅을 해보려고 review에 찍고 돌려봤다. 디버그가 잡히지 않았다. 그런데 쿼리는 잘 나가고 오류도 안난다..???
➡️ 쿼리를 살펴보니 room어쩌구하며 쿼리가 나가서 roomController로 가봤다.
➡️ room에서 이렇게 작성되어 있어서 여기 roomController와 매핑이 되고 있었던 것..! room을 만든 조원은 @PathVariable을 사용하여 이렇게 해놓은 듯 싶다. 그래서 마지막에 최종 합친 코드에서 몇가지들이 잘 안됐던 것 같다. (최종 모두 합친 부분에서 몇가지 오류가 있다고해서 나는 아직 다 합치지 않은 코드로 가지고 돌려보는 중)
➡️나중에 최종 코드를 합친다면 지금 나오지 않는 부분들도 잘 나오겠지..!
느낀점
프로젝트를 시작하기에 앞서 지난 주에 조별 발표가 있었고.
조별 발표는 프로젝트 워밍업으로 생각하며 조금 일찍 준비해 보기로 했었다.
나는 그동안 다들 한번 쯤 해봤었을 '회원가입' 과 '로그인'을 해보지 못해 이번 기회에 맡아서 만들어 봤다.
프로젝트의 방향과 조별발표의 방향이 달라서 이 부분을 프로젝트에 반영하진 않았지만,
회원가입과 로그인에 대한 부분에 대해 '나만 못하는게 아닐까' 하는 마음을 없앨 수 있어서 좋았다.
생각보다 빠르게 만들어져서 '내 생각보다 내가 알고 있는 부분이 더 있구나!' 싶기도 해서 더 좋았다~!!
좋았던점
아쉬웠던점
➡️ query dsl을 배웠지만 사용해보지 못한 점이 좀 아쉽다.
➡️ 예외처리도 우선순위를 뒤에 두고 모든 코드를 짠 후 어떤 예외를 처리해줘야 할지 생각해봤는데 남은 시간동안 처리하기에는 시간이 부족하여 손댈 수 없었다.
➡️ totalPrice 에 ,(콤마)가 들어갈 수 있게 해봐도 좋을 것 같다.
코드 참고 - reservation, review