Elice-Track-Cloud-4-HanSH / buy-gurus-back

0 stars 0 forks source link

주문 내역 세부 로직 구현중인데 장바구니에 담긴 물품의 판매자가 여러 명일때는 어떻게 할지 조언 부탁드립니다. #29

Open PromotezCitizen opened 1 month ago

PromotezCitizen commented 1 month ago

In GitLab by @HanSanghyeon on Oct 18, 2024, 15:09

  1. 주문 제출 시 판매자별로 물건을 받아오기 장점 : 주문자별 배송비 설정 가능 단점 : 해당 DTO처럼 사용 가능하도록 수정 필요

    {
    1: {
    orderInfoList: [
      { quantity: 1, productId: 30032 }
    ],
    shippingInfo: { ... },
    shippingFee: 3000
    },
    2: {
    ...
    }
    }
    [
    {
    orderInfoList: [
      { quantity: 1, productId: 30032 }
    ],
    shippingInfo: { ... },
    shippingFee: 3000
    sellerId: 93302  <-- 이 부분은 product에서 가져오는 방식으로 사용 가능
    },
    {
    ... 위와 같은 형식 ...
    }
    ]
  2. Request 시 여러 번 전송 기존 DTO를 그대로 사용할 수 있으나 주문 내역 저장 중 오류가 발생하면 저장된 데이터와 저장되지 않은 데이터가 발생
    transaction이 각 요청에만 걸려있어 총 10건을 저장해야하는데 4번째 요청에서 오류가 발생한다면 1,2,3번째는 처리 완료됨

  3. 주문자 정보를 Product에서 가져와 적용 기존 DTO를 그대로 사용할 수 있으나 배송비 각각 적용 불가

고려해볼 다른 방법이 있다면 추천 부탁드립니다!

PromotezCitizen commented 1 month ago

In GitLab by @mumunuu on Oct 22, 2024, 10:06

[
  {
    orderInfoList: [
      { quantity: 1, productId: 30032 }
    ],
    shippingInfo: { ... },
    shippingFee: 3000
  },
 {
    ...
 }
]

// 배열로 감싸는게 일단 효율적... (구조같은거 신경 안쓰더라도)

PromotezCitizen commented 1 month ago

In GitLab by @mumunuu on Oct 22, 2024, 10:14

생각할 포인트...

  1. 프론트엔드에서 어떤것을 구매하려고 정보를 백엔드로 넘겨준다?
    => 결국에는 백엔드에서는 이게 진짜 맞는 데이터인지 아닌지? 신뢰하면 X
    => 최소한의 넘겨줘서 (물론.. 효율성을 좀 따져서 좀 더 많은 정보를 줘도 되긴 함) 이를 검증해야 한다.
    => 더 받으면, 나중에 카드 부분 취소라도 해줄 수 있다.
    => 덜 받으면 큰일난다.

  2. 어차피 상품 정보를 가져올때, 판매자 정보도 가져오면 되긴한다. 판매자 정렬해서 계산한다.
    => 이런 관점이면 굳이 판매자 id를 보낼 필요가 없다.
    select from product p join seller s on p.seller_id = s.id order by s.id asc;
    => 결론적으로는 상품을 계산하기 위한, 최소한의 정보만 주면 됩니다. 프론트엔드에서는.
    => select
    from product where seller_id = ?