Spring

Spring Boot - 주문 도메인 개발

팅탱팅탱 2024. 3. 11. 17:43

구현 해야할 기능

- 상품 주문 기능

- 주문 내역 조회 기능

- 주문 취소 기능

 

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

 

주문을 생성하는게 많이 복잡함

그래서 이렇게 복잡한건 별도의 생성 메서드가 있으면 좋다. 따라서 order 클래스에 생성 메서드를 만들어준다.

 

다음으로는 비즈니스 로직을 구현할 것이다.

주문 취소 로직 작성시에는 배송이 되어버린 상태라면 취소를 못하는 케이스를 넣었고,

주문 취소시에는 order상태를 cancle로 만들어주고 반복문을 이용하여서 cancle을 처리해주어야한다(소비자가 상품을 2개 주문했으면 2가지 모두에 취소를 해야하기 때문)

그래서 orderItem 클래스에도 cancle 메서드를 만들어줘야 한다.

 

 

다음으로는 비즈니스 로직 이외로 조회로직도 만들어줘야 한다.

우선 전체 가격 조회 로직을 만들어보겠다.

이렇게 for문으로 돌면서 totalprice를 가져와서 더하는 방식으로해야하는 이유는 orderItem 내부에 상품 가격과 주문 수량이 있기때문에 orderItem 클래스 내부에서 그 둘을 곱한 가격을 가져와야한다.

 

 

stream을 사용하여서 코드 축소

 

orderItem에서도 생성 메서드를 만들어줄 것이다.

 

 

주문 리포지토리 개발

 

다음으론 orderservice 클래스를 만들어야하는데

이때 구현해야 할 기능들로는 주문 기능, 취소 기능, 검색 기능 을 구현해야한다.

우선 주문 기능을 구현했다

 

다음으로는 주문 취소 기능을 구현할것이다.

주문 취소 기능은 orderid로 주문을 추출하여서 cancle메서드로 취소하는 방식으로 하였다.

 

다음은 예외 테스트로 상품 주문 갯수 재고 초과 테스트를 해볼것이다.

 

Junit5를 사용하여서 테스트 하고있기때문에 junit4에서 지원하는 test 어노테이션에 expected를 사용할수 없기에

assertThrows를 사용하여 람다 형식으로 검증을 해주었다.