오랜만에 TIL을 작성한다..
이번주는 spring 심화 주차인데, 정말 심화라서 그런지 너무 어렵다.
기초가 부족해서 더 어렵게 느껴지는것 같다.
과제는 "요구사항에 맞춰 배달서비스 API를 구성하기"이며, 주어진 테스트코드에 all pass 시켜야한다.
- 음식점 정보 입력받아 등록
- 음식점 이름 (name)
- 최소주문 가격 (minOrderPrice)
- 허용값: 1,000원 ~ 100,000원 입력
- 100 원 단위로만 입력 가능 (예. 2,220원 입력 시 에러발생. 2,300원은 입력 가능)
- 허용값이 아니거나 100원 단위 입력이 아닌 경우 에러 발생시킴
- 기본 배달비 (deliveryFee)
- 허용값: 0원 ~ 10,000원 (예. 11,000원 입력 시 에러발생.)
- 500 원 단위로만 입력 가능 (예. 2,200원 입력 시 에러발생. 2,500원 입력 가능)
- 음식점 조회
- 등록된 모든 음식점 정보 조회 가능
- 등록 시 입력한 음식점 정보 (name, minOrderPrice, deliveryFee)
- DB 테이블 ID (id)
- 음식 등록 및 메뉴판 조회
- 음식점 ID 및 음식 정보 입력받아 등록
- 음식점 ID (restaurantId)
- 음식점 DB 테이블 ID
- 음식명 (name)
- 같은 음식점 내에서는 음식 이름이 중복될 수 없음 (예. '자담치킨 강남점'에 '후라이드치킨' 이 이미 등록되어 있다면 중복하여 등록할 수 없지만, 다른 음식점인 '맘스터치 강남점'에는 '후라이드치킨' 을 등록 가능)
- 가격 (price)
- 허용값: 100원 ~ 1,000,000원
- 100 원 단위로만 입력 가능 (예. 2,220원 입력 시 에러발생. 2,300원 입력 가능)
- 허용값이 아니거나 100원 단위 입력이 아닌 경우 에러 발생시킴
- 메뉴판 조회
- 하나의 음식점에 등록된 모든 음식 정보 조회
- 등록 시 입력한 음식 정보 (name, price)
- DB 테이블 ID (id)
- 주문 요청하기 및 주문 조회
- 주문 요청 시 배달 음식점 및 음식 정보 입력받음
- 음식점 ID (restaurantId)
- 음식 주문 정보 (foods)
- 음식 ID (id)
- 음식을 주문할 수량 (quantity)
- 허용값: 1 ~ 100
- 허용값이 아니면 에러 발생시킴
- 주문 요청에 대한 응답으로 다음 정보를 포함시킴
- 주문 음식점 이름 (restaurantName)
- 주문 음식 정보 (foods)
- 주문 음식명 (name)
- 주문 수량 (quantity)
- 주문 음식의 가격 (price)
- 배달비 (deliveryFee)
- 최종 결제 금액 (totalPrice)
- 계산방법
- "주문 음식 가격들의 총 합" 이 주문 음식점의 "최소주문 가격" 을 넘지 않을 시 에러 발생시킴
- 주문 조회
주어진 테스트코드(통합테스트)에 맞추어 음식,음식점 등록 및 조회를 하고 주문하기를 구현해야한다. 사실 내가 직접 짠 코드는 없고 다 여기저기서 참고한 내용이라 로직을 정확히 어떻게 짰는지, 테스트와 어떻게 맞추어보았는지를 설명하기에는 무리가 있다....... 난 아직 멀었나보다ㅠ
이런 저런 오류가 많이 났지만, 팀원의 도움으로 오류를 해결하여 테스트 코드가 문제 없이 잘 돌아갔다. 정말 어이없는 실수도 많이 했다.
- Restaurant컨트롤러에 get mapping만 하고 put mapping을 하지 않았다...... 이래놓고 백날 arc에 post를 돌려가며 404 에러가 왜 뜨지ㅠ하고있었다......
- 테스트를 돌리면 cannot deserialize from Object value 라는 오류가 계속 떴었는데, 알고보니 생성자가 존재하지 않아서 mapping으로 받아 줄 때 jackson라이브러리(JsonProcessingException)에서 내는 오류였다. 테스트코드에서 postRequest 보내주는 부분이 있는데 거기서 응답을 받을때 받아온 데이터를 처리해야하는데 기본생성자를 지정하지 않아서 제대로 작동하지 않았다.(고 한다. 도와주신 민지님 너무 감사....🥹🥹🥹)
- 그리고 @Builder라는 것도 잘 몰라서 빼먹었는데, 승유님 덕분에 알게되었다. 감사합니다ㅠ
빌더 패턴을 적용시 하기와 같은 효과:
1) 불필요한 생성자 제거
2) 데이터의 순서에 상관없이 객체 생성 가능
3) 명시적 선언으로 이해하기 쉬움.