주문목록검색 취소

1. OrderController 클래스에서

 

@GetMapping 작성

@PostMapping작성

사진

 

2. OrderList.html 파일 작성

 

 

3. 특정이름으로 검색이

마주한 에러 및 문제해결

-OrderRepositoryJPA Criteria 구문 작성

-OrderService 클래스에 findAllCriteria로 변경

 

실습

화면출력

정리

1.orderList.html파일

-검색조건 양식(form)이 있어야 한다.

 

회원명 구문

주문상태 구문

검색 구문

->검색 버튼을 누르면

 

위에 구문에서 작성하고 선택한 옵션값들을 보낸 값들이

OrderController 클래스에 OrderSearchmemberNameOrderStatus에 바인딩이 된다.

다시 OrderController에 와서 바인딩 된 상태로 return에 지정한 order/orderList로 넘어가게 된다.

 

enum typeorder,cancel을 둘다 값을 OrderStatus 루프를 통해 뿌리고 select를 해야 한다.

타임리프의 문법을 사용해서 값을 뿌릴 수 있다.

, enum에 잇는 values를 가져와서 값을 뿌리게 된다.

 

 

<tr th:each="item : ${orders}"> 구문 설명

<td th:text="${item.id}"></td>

<td th:text="${item.member.name}"></td>

<td th:text="${item.orderItems[0].item.name}"></td>

<td th:text="${item.orderItems[0].orderPrice}"></td>

<td th:text="${item.orderItems[0].count}"></td>

<td th:text="${item.status}"></td>

<td th:text="${item.orderDate}"></td>

<td>

 

-orders를 주문으로 돌려서 나오게 한다.

 

 

<a th:if="${item.status.name() == 'ORDER'}" 구문설명

href="#" th:href="'javascript:cancel('+${item.id}+')'"

class="btn btn-danger">CANCEL</a>

 

-상태가 order이면 cancel버튼이 나오도록 자바 스크립트로 작성을 했다.

cancel을 누를 시에 자바스크립트 캔슬이 호출되어 하기구문으로 넘어간다.

 

<script>

function cancel(id) {

var form = document.createElement("form");

form.setAttribute("method", "post");

form.setAttribute("action", "/orders/" + id + "/cancel");

document.body.appendChild(form);

form.submit();

}

</script>

 

- 구문에서 form 내에 해당하는 내용들을 위해 구문작성을 만들어야 한다.

 

-@PostMapping 방식으로 cancelOrder을 받아와서

redirect으로 화면에 cancel상태의 화면을 출력한다.

 

 

cancel버튼클릭시 화면 및 cancel상태의 목록검색

 

특정이름없이 전체목록출력

테스트 목표

-상품 주문이 성공해야 한다.

-상품을 주문할 때 재고 수량을 초과하면 안 된다.

-주문 취소가 성공해야 한다.

 

1. OrderServiceTest클래스를 만든다.

-shitft + ctrl + T를 이용하여 JUnit4createTest를 한다.

 

@Autowired

ENTITY매니저로 테스트데이터를 바로 넣기 위해 사용

em.persist(member);

 

 

2. 상품주문 테스트

사진

 

설명

-주석 확인할것

 

3. 상품주문재고수량초과

사진

 

설명

상품주문재고수량초과 상황설정

-주문일어 날 때에 재고수량 초과 하도록 설정

-fail 구문 작성

 

상품수량을 초과되게 작성하면 정상작동후 fail로 내려 온다.

-상품주문재고수량초과 구문이 제대로 작동됨을 확인할 수 있다.

 

상품 수량을 숫자에 맞게 작성하면 에러가 발생한다.

주문수량이 재고수량초과가 되지 않으면

orderService.order(member.getId(), item.getId(), orderCount); 이 시점에서 처리가 끝나므로 fail로 내려가지 않아

fail구문이 작동되지 않으므로 에러가 발생한다.

 

4. 주문취소

-(ctrl + shift + t를 누르면 실제 주문취소구문이 있는 클래스를 왔다갔다 할 수 있다.)

 

사진

 

설명

GIVEN

a.주문취소 상황설정

-Long orderId = orderService.order(member.getId(), item.getId(), orderCount());

:orderId를 생성한다. (주문한 상황까지 상황이 주어져야 한다.)

 

b.주문이 취소 되었을 때

 

c.취소된 주문 Id 확인, 주문 취소 Status, 아이템재고수량결과 구문

 

주문도메인개발

 

주문도메인이 제일 중요!

-비즈니스로직들이 얽혀서 돌아가는 것을 jpa나 엔티티를 가지고 어떻게 풀어내는지 알 수 있다.

-트랜잭션 스크립트 패턴과 도메인모델패턴을 코드를 통해 이해 할 수 있다.

 

1.주문 도메인 개발

구현 기능

-상품 주문

-주문 내역 조회

-주문 취소

 

순서

-주문 엔티티, 주문상품 엔티티 개발 (핵심비즈니스로직)

-주문 리포지토리 개발

-주문 서비스 개발

-주문 검색 기능 개발

-주문 기능 테스트

 

주문,주문상품 엔티티 개발

1. 주문클래스에서 생성메서드 생성

 

설명

-Order가 연관관계를 걸면서 세팅이 되고, 상태랑 주문시간 정보까지 정리가 되어서 세팅이 된다.

 

중요!

앞으로 무언가 생성하는 시점을 변경해야 하면 다른데서가 아닌 이곳에서만 바꾸면 되기 때문에 이렇게 작성하는 것이 중요하다.

 

실습사진

 

2.주문클래스에서 비즈니스로직 주문취소 작성

설명

a.완료된 배송은 취소 불가

 

b.주문하고 난 뒤에 취소

-주문한 상품이 2개이면 취소시 2개 각각 취소를 시켜주어야 한다.

 OrderItem에 취소구문작성해주어야 함.

 

c. OrderItem클래스에서 취소구문작성

-주문취소로 인해 orderItem에도 비즈니스 로직이 생겼다.

-취소하게 됨으로써 주문하기전에 기존 수량으로 다시 올라간다.

 

d. 조회로직(주문상품 전체 가격조회)

-주문총가격은 주문가격 및 수량으로 계산이 되어야 한다.

 

조회로직 간소화하는 방법

1. for지점에서 alt + enter -> sum,

2. inttotalprice에서 ctrl + alt +n 사용 stream로 변경)

3. 최종정리

 

실습사진

 

e.조회로직의 OrderItemgetTotalPricealt + enter이용하여 OrderItem getTotalPrice메서드 생성

-주문총가격은 주문가격 및 수량으로 계산되어야함을 염두에 두고 작성한다.

 

사진

 

f. 주문이 생성될때에 생성되는 OrderItem에 대한 생성메서드를 OrderItem클래스에서 작성

-Order클래스에서 작성된 생성메서드 createOrder에서 받아오는 orderItem 정보를 위해 생성메서드를 작성함

-주문이 생성되기 전에 기존에 남아있는 수량에서 OrderItem에서 주문한 수량만큼 수량이

 내려가고 order클래스에서 createOrder(신규주문생성)으로 정보가 넘어가게 된다.

*단순히 비즈니스적인 면에서 코드를 작성을 할 때에 위에처럼 그렇게 되어야 논리상 말이 맞.

 실제로는 OrderItem이 넘어 올 때 파라미터나 DTO를 이용하여 복잡하게 구성될 것 같다.

 

사진

기능 설명정리

생성메서드

밖에서 새로운 Order를 받아와서 set하는 방식이 아닌

주문이 들어오는 시작점부터 createOrder를 호출해서

Order클래스 안에서 Order에 대한 비즈니스로직을 완료한다.

주문생성과 관련된 문제가 있을 때 이곳을 확인하면 된다.

 

주문취소

취소불가

-이미 배송완료된 상품 취소는 불가하다는 비즈니스로직에 대한 체크로직이 엔티티 안에 있다.

 

취소

-취소 될시에 해당 아이템취소 수량만큼 수량이 다시 늘어나게 된다.

 

조회로직

전체주문가격조회

-주문가격과 주문수량을 곱하기 해서 최종 주문가격이 조회가 된다.

 

 

+ Recent posts