커피숍 시스템에 필요한 기능들을 구현해 보았습니다.
-
- 커피 주문에 필요한 메뉴를 구성하고 조회가 가능합니다.
- 커피 주문은 포인트로 가능합니다.
- 커피 주문내역을 통해 인기있는 메뉴를 추천합니다.
-
- 커피 메뉴 목록 조회 API
- 포인트 충전하기 API
- 커피 주문, 결제하기 API
- 인기메뉴 목록 조회 API
-
- 커피 메뉴 목록 조회 API
- 커피 정보 (메뉴 ID,이름 ,가격) 을 조회하는 API
- 포인트 충전하기 API
- 결제는 포인트로만 가능하며, 포인트를 충전하는 API
- 사용자 id, 충전금액을 입력 받아 포인트를 충전합니다.
- 커피 주문/결제 하기 API
- 사용자 id, 메뉴 id 를 입력받아 주문을 하고 결제를 진행
- 결제는 포인트로만 가능하며 충전한 포인트에서 주문금액을 차감
- 인기메뉴 목록 조회 API
- 최근 7일간 인기있는 메뉴 3개를 조회하는 API
- 커피 메뉴 목록 조회 API
-
중복쿼리 제거
-
orderService에서 주문받은 커피를 처리하는 로직에서 dto에 수량과 커피 id를 받아오고 새로운 Order와 수량,커피종류,총 가격이 담겨있는 OrderDetail을 생성하기 전에 Dto로부터 받은 id와 수량을 가지고 총 금액이 얼마인지 미리 계산하게끔 설계하였다.
private Long getTotalPrice(OrderCoffeeDto dto) { long totalPrice = 0L; for (int i = 0; i < dto.getOrderCoffeeDetailDto().size(); i++) { Long coffeeId =dto.getOrderCoffeeDetailDto().get(i).getCoffeeId(); Coffee coffee = coffeeRepository.findById(coffeeId).orElseThrow(); int quantity = dto.getOrderCoffeeDetailDto().get(i).getQuantity(); int price = coffee.getPrice(); totalPrice += (long)price*quantity; } return totalPrice; }
위와같은 메소드를 초기에 만들었는데 주문받은 커피들이 Order에 등록될 때에도 동일한 쿼리가 나가고 있는것을 발견햇고 비록 성능에 큰 영향을 미치지 않는 수준이라 하여도 동일한 쿼리를 여러번 날릴 필요는 없다고 판단, 총 주문금액을 Order에 OrderDetail을 관계맺어줄 때 마다 합산하도록 변경하여 동일한 쿼리가 나가는 것을 방지하였다.
-