구매 목록 관련 마무리 (리뷰)
my.js 추가
변경한 상태의 인덱스로 콘솔이 찍힌다.
ShoppingController 상품의 배송 상태를 변경할 것
!userEntity.isAdmin()
으로 수정
IShoppingMapper OrderEntity. 주문한 상품을 SELECT
xml
ShoppingService getOrder는 주문한 상품을 불러오겠다.
ShoppingController
GeneralResult enum을 만든다.
ShoppingController
orderEntity가 null 이면 주문한 상품이 없다는 것이겠다.
현재 주문한 상품의 배송 상태. orderStatusIndex를 받아온다.
이제 주문한 상품이 있다면, 그 상태에 따라 상태 정보를 UPGRADE 해주어야겠다.
IShoppingMapper
xml
ShoppingService
0보다 크다는 건 업데이트 할 상품이 있다는 것이겠다.
ShoppingController
업데이트 할 상품이 있다면 SUCCESS 없다면 FAILURE
result : NOT_FOUND, FAILURE, SUCCESS 의 결과를 가짐.
"result"
를 JSON 언어로 해석하고 switch로 각각의 result에 맞는 구현을 한다.
my.js
이 안에서 일어날 일들이다.
oid
는 주문한 상품의 인덱스 번호.
orderStatuses.keySet()
는 주문한 상품 상태정보(인덱스)를 가져온다. get(key)는 그 인덱스에 해당하는 value인 text를 담고 있다.
현재 UserController의 getMy메서드에서 orderStatuses를 HashMap으로 만들어 key에는 상품배송상태정보의 인덱스를, value에는 그 인덱스에 해당하는 text를 담고 있다.
my.html
이제 상태를 변경하면 배송현황에서 변경된 상태로 적용된다.
관리자가 아닌 계정에서도 적용된 걸 확인할 수 있다.
배송완료 시에는 리뷰쓰기가 뜬다.
배송상태정보가 4(배송완료)이고, 유저 정보가 주문자의 정보와 같다면 리뷰쓰기가 보이도록 한다.
1~3(상품준비중,배송출발,배송중)은 구매취소 버튼이 가능하게 한다.
배송상태정보가 4(배송완료)이면 반품신청 버튼이 가능하게 한다.
ShoppingController
ExtendedResult
ShoppingController result의 타입을 Enum<?>으로 변경하였더니 ExtendedResult enum도 받을 수 있게 됨.
SUCCESS라면 주문한 상품을 productEntity에 전달한다. 그 상품만을 가지고 있겠다.
이제 모든 경우에 대해주었고, result를 addObject하여 사용할 것.
review/write.html 추가
name = rate
평점과 name = comment
평가
현재 작성하기 눌러보면 oid
, rate
, comment
는 넘어간다
DB reviews
테이블 추가 리뷰를 담겠다.
ReviewEntity
ShoppingController
rate와 comment를 추가적으로 더 받아야 한다.
한 주문건에 대해 한번만 리뷰 작성이 될 수 있을 것.
IShoppingMapper
xml
orderIndex
는 order의 index를 참조한다.
ShoppingService
리뷰의 존재여부를 파악한다. 0보다 크면 존재하겠다.
ExtendedResult에 DUPLICATE 추가.
ShoppingController
해당 상품에 리뷰가 이미 있다면 DUPLICATE 결과값을 준다.
물론 위의 if조건식을 다 거쳤기에, 주문을 했고, 주문자와 로그인한 계정의 이메일이 동일한 상황에서이다.
IShoppingMapper 이제 리뷰를 INSERT 해보자.
xml
ShoppingService
ShoppingController 해당 상품에 리뷰가 없다면 쓸 수 있을 것이고, 그 정보를 reviewEntity에 담는다. 작성한 리뷰를 DB에 집어넣는 것. 그리고 그 상품의 상세정보로 이동한다. product/detail
write.html DUPLICATE js추가
null이 아닐 때 조건도 걸어준다.
review/write 가 GET에서 POST가 되면(값이 전달되면)null이 아니게 되겠지.
리뷰를 직접 작성해보자.
reviews 테이블에 잘 올라온다.
동일한 상품에 대해 한번 더 리뷰 작성 시 DUPLICATE가 뜬다.
이제는 이렇게 작성된 리뷰 개수와 리뷰 점수 정보를 보내보자.
ProductDto
IProductMapper.xml ProductDto에 상품에 대한 정보가 다 담겨졌다!
리뷰가 작성된 상품에 갯수와 그 점수가 나와있다.
userEmail과 orderIndex가 동일한 상황은 한번 밖에 존재할 수 없을 것이다. 리뷰 작성은 한 구매 건에 한번만 가능할테니까.
그럼 리뷰 작성 후 user/my
에서 리뷰를 작성한 상품에는 리뷰쓰기가 더 이상 보여져선 안될 것이다.