INTP의 멋대로 개발 세상

[📚상품 구매 사이트 3단계] 구매자 서버 만들기 - 6-2. 상품 구매하기 기능 만들기 본문

KDT 풀스택 국비 과정/파이널 프로젝트(미니)

[📚상품 구매 사이트 3단계] 구매자 서버 만들기 - 6-2. 상품 구매하기 기능 만들기

인팁구름 2023. 4. 23. 21:44

 

드디어 구매하기 기능을 만들어 볼 것이다💧💧 (진땀 빼는 중 헉헉)

내용이 길어 포스팅을 나눈 거라

앞 포스팅 6-1 을 꼭 보고 와야 한다!

구매하기 기능의 전반적인 개요? + 완성 코드가 적혀 있다!!

 

 

[연습📚상품 구매 사이트] 구매자 서버 만들기 - 6-1. 상품 구매하기 - 주문 목록(주문 조회) 페이

구매자 입장에서 상품 상세페이지를 들어가면 아래에 구매 수량을 입력할 수 있는 input 태그와 input에 입력한 값 만큼 구매가 되는 버튼을 만들고, 구매가 완료되면 나의 주문목록 페이지로 이동

whiteclouds-dev.tistory.com

 


 

🎤 코드 리뷰 - 구매하기 기능 만들기 🎤

 

전체 코드

 

코드들을 하나씩 뜯어보자💔

 

 

먼저 구매하기 기능은 로그인 한 사람만 할 수 있도록 막아준다.

 

 

먼저 productId를 이용해서 (상세페이지에서 구매하기를 누를 것이기 때문에 해당 상품의 id임)

상품의 정보들을 가져와준다.

 

 

 findById는 id에 해당하는 상품의 모든 정보를 가져온다.

그러니까 위의 사진처럼 구매하려는 해당 상품의 Qty(재고)에서 주문수량(ordersQty)를 뺐을 때

0보다 작으면 안되니 예외처리를 해 준다.

 

위의 과정을 거쳤다면, 구매자가 입력한 구매수량은 상품의 재고보다 적다는 뜻일테고,

그러면 구매하고 난 후의 상품재고 수를 업데이트 해 주자!

productRepository.java

ordersDto의 정보를 매개변수로 넣어준다.

product.xml

그러면 MyBatis에서 product 테이블에 있던 재고(Qty)를

재고 - 구매수량한 값으로 업데이트 해 준다💫

 

orderscontroller.java

principal.getUserId() ⬅ 현재 세션에 로그인 한 유저의 Id 값인데,

너무 길어서 userId로 만들어 주고, ordersRepository에 insert 해 준다😁

 

 

매개변수를 2개 넣었기 때문에 @Param 어노테이션 붙이는 거 잊지 말기🤭

안붙여서 데이터 값을 못찾았었다

 

 

구매에 대한 정보를 모두 insert 해 준다!!

 

 

인서트가 완료되면 구매목록으로 redirect 해 주면 된다.

redirect 주소는 구매목록 페이지의 주소값을 가져오면 된다😎

 

여기!

 

 

 

orderController와 productDetail 페이지의 form 태그 action 주소와 method 속성을 맞춰준다!

상품 상세페이지의 값을 들고 구매를 할 것이기 때문이다🛒🛒

 

 

 


 

📊 결과 확인 📊

 

 

로그인을 한 뒤,

 

 

상품 목록이 나오면 딸기🍓를 구매해 보자

 

 

현재 재고가 98개니까 8개를 입력하고 구매하기 클릭

 

 

 

구매 목록 페이지로 이동하면 딸기 8개가 구매된 것을 확인할 수 있다.

 

 

 

 

상품 목록 페이지로 가면 ssar이 8개를 구매했으니 90개로 재고가 바뀌어 있다

 

 

 

 

Comments