[플젝] 2PicGames - 주문완료테이블 컬럼문제

서현서현·2022년 5월 30일
0

DB, SQL

목록 보기
27/27

쟁점

[ 게임을 구매하는 두가지 경로 ]

  1. 게임의 상세페이지에서 바로구매 (하나만 단건구매되며, 장바구니의 내용물은 무시됨)
  2. 장바구니로 이동하여 장바구니의 모든상품 구매

이렇게 선택하여 결제API를 통하여 결제를 완료해 넘어간 페이지에서 ORDERS 테이블을 채워줄것임

그런데 문제점 발생 !

  1. ORDERS테이블의 CART_NO는 어떻게 채워줄것인가? 장바구니로 이동하지 않는 단건결제 상품의 경우 CART테이블에 들어가지 않기 때문에 CART_NO가 없다

  2. 또 착각을 하나 했는데 주문완료한 CART_NO는 CART테이블에서 삭제하려고 했는데 그러면 안됨! 장바구니 조회시 mem_ID에 해당하는 모든 장바구니를 불러올거니까 삭제연산이 맞다고 생각했지만, 그러면 ORDERS테이블의 참조무결성 제약조건이 위배된다.


해결

  1. 게임상세에서 바로 단건결제로 넘어가는 경우에도 CART테이블을 거쳐서 가게 만든다.
    지금바로구매를 누르면 주문창으로 넘어오잖아 주문창 코드에 바로그매에서 넘어올때를 가정한 분기문이 있는데 거기에 장바구니테이블에 아이디를 추가하는 내용을 넣으면 되겠다. 그러면 그부분에서는 gameId를 통해 게임메타정보와 가격을 구하므로 장바구니에 아이디만 추가되고 또다른 문제는 없이 결제창으로 넘어가게 될것이다! ⇒ 근데 이미 장바구니에 있는 게임을 단건구매 하려고 하면??? 상관없네 이미 CARTNO가 부여된거니까..! 아하 그럼 CARTNO를 무작정 부여하기 전에 장바구니에 그 GAME_ID가 있는지 확인부터 해야겠구나

  2. CART테이블에서 삭제될수 있는건 장바구니에서 삭제버튼을 눌렀을때만으로 제한한다.

    따라서 주문완료한 CART_NO는 삭제하지 않으며, ORDERS테이블에 외래키로 추가되고 이후 사용자가 담아놓은 CART를 조회할때 ORDERS테이블을 필수적으로 조회하게 만들어 삭제연산 없이도 구매완료한 게임이 카트에 뜨지 않게 만든다


결론 : 단건결제를 포함해 주문창으로 넘어오는 게임들은 모두 CART테이블에 등록되어있도록 한다! 장바구니는 이미 구현되어있으니 바로구매 프로세스에 해당 GAME_ID에 대해 CART_NO가 부여되어있는지 확인하고 없으면 추가시켜준 후 결제창으로 넘어가게 만든다! 결제성공 후 이동하는 서블릿에서 ORDER테이블에 결제완료된 내용을 넣어주는 메소드를 만들어주고… 이후 CART 조회할때는 ORDERS테이블을 먼저 검사해서 여기 있는 CART_ID는 장바구니조회에서 제외시켜줘야한다.

어 그러면 장바구니 조회에서 주문하기는 memId만 들고 넘어가는데…

개발방향

  • 장바구니결제 개선
**GetCartController(장바구니 조회부)에서 Order테이블에 있는 내용들은 제외하고 불러오기**
- 이러면 주문완료한 내역은 삭제버튼이 뜨지 않으므로 참조무결성에 영향 없다
- 장바구니 추가할때 이미 결제한 게임도 cart에 남아있으므로 개체무결성 영향 없다

**OrderController(주문부)else문에서 memId만으로 작동하므로 장바구니의 모든 내용을
조회하므로 여기서도 조회가 끝난 후 Order테이블에 있는 내용을 빼주자**
[GetCartController(장바구니 조회부)에서 Order테이블에 있는 내용들은 제외하고 불러오기]
// orderList 안에 있는 cartNo들을 제외 cartList에서 제외
		for(String cartNo : orderList) {
			for(CartVO cart : cartList) {
				if(cart.getCartNo().equals(cartNo)) {
					cartList.remove(cart);
				}
			}
		}
  • 단건결제 로직
OrderController(주문부)if문에서 
cart테이블에 해당 memId,gameId 조합이 존재하는지 검사하고
이미 있다면 (같은내용이 장바구니에 있다) 넘어가고 없다면 (장바구니에 없다) 추가해준다
뭘? gameId와 memId를 Cart테이블에 추가하는 쿼리가 필요!
그리고 나머지 로직은 그대로 사용
  • 장바구니 조회 & 위시리스트 개선
불러오기 전에 Order 테이블을 체크하여 주문완료된 게임의 경우 화면에 표시하지 않는다
  • 결제완료한 게임정보에 대하여
Order 테이블에 CartNo를 넣어줘야함 근데...
결제API엔 totalPrice만 들어가고 CARTNO가 안들어가는데 어쩌집............
일단 쿼리스트링으로 보내주자.....

0개의 댓글