주문 CRUD 기능 개발 과정
오늘은 어제 계속 고민하던 주문 생성 로직을 완성했다.
이번 프로젝트 요구사항 중
- 고객은 배달 주문 방법과 포장 주문 방법 총 2가지 방법을 선택할 수 있다.
라는 요구사항이 있었다.
배달 주문에서는 장바구니에서 원하는 메뉴들을 선택한 후 하나의 주문리스트로 만들고 테이블에 넣은 다음, 결제하면 되는데 포장 주문은 어떻게 구현해야할지 고민이었다. 포장 주문은 매장에서 결제를 한다는 조건이 있었다.
그래서 고객이 배달 주문과 포장 주문을 둘다 직접 주문테이블에 넣는게 아니라, 고객은 배달 주문만 생성할 수 있고, 가게주인은 포장 주문만 생성할 수 있게 해야겠다고 생각했다.
그래서 고객(Customer)과 가게주인(Owner) 권한을 가진 유저를 각각 분리한 주문 CRUD API를 설계했다. 그리고 배달 주문인지 포장 주문인지 여부를 구별하기 위해 IsDelivery로 true false를 체크해주었다.
이때 또다시 생각난 고민은, 각각의 유저가 주문한 주문 목록을 조회할 땐 배달 주문과 포장 주문이 모두 나와야하는 문제였다.
나는 주문 테이블에 배달 주문과 포장 주문 생성 시 customerId와 ownerId를 넣어주는 방법을 선택했다.
그래야 userId로 주문 목록을 다 찾아올 수 있기 때문이다. Owner도 결국 user이기 때문에, userId로 주문 목록을 찾아와야한다. 아래는 주문 생성 서비스 코드의 일부 부분이다.
- 배달 주문을 할 때는 customerId에 현재 userId를 넣고 ownerId엔 아래와 같이 탐색해 넣어줬다.
ownerId = cart.getMenu().getStore().getUser().getId();
- 포장 주문을 할 때는 ownerId에는 현재 userId를 넣고 customerId에 아래와 같이 탐색해 넣어줬다.
Optional<P_user> customer = userRepository.findByEmail(takeOutOrderCreateRequestDto.getEmail());
Long customerId = customer.getId();
그런데 이렇게 타고타고 들어가 탐색하는게 조회 성능을 안좋게 만들 것 같다는 생각이 들어 더 좋은 방법을 고민해봐야겠다고 생각했다.
'프로젝트 기록 > 백엔드 심화 부트캠프' 카테고리의 다른 글
241118 프로젝트 TIL (1) | 2024.11.18 |
---|---|
241115 프로젝트 TIL (1) | 2024.11.15 |
241114 프로젝트 TIL (2) | 2024.11.14 |
241113 프로젝트 TIL (2) | 2024.11.13 |
241111 프로젝트 TIL (2) | 2024.11.11 |