Jpa를 이용하여 간단한 주문 시스템을 구현한다.
상점 수는 하나만 있다고 가정한다.
상점에서 판매하고 있는 상품이 존재한다.
db 구조, api 명세는 자유이며 PR 요청시 설계의 이유가 있으면 더 좋다.
아래의 요구사항은 최소 요구사항이며 원한다면 기능을 추가해도 된다.
- 상품은 상품 번호, 상품명, 가격, 재고수를 가지고 있다.
- 사용자는 이메일, 비밀번호를 가지고 있다.
- 이 때 비밀번호는 해쉬 함수를 이용해서 데이터베이스에 저장해야 한다. 이 때 해쉬 함수는 SHA-256을 사용한다.
- 사용자가 로그인을 하는 경우 토큰을 반환받고, 해당 토큰을 이용해서 상품 주문, 쿠폰 조회를 할 수 있다.
- 토큰은 JWT를 사용하고 secret은
herb
이다.
- 사용자의 쿠폰을 조회할 수 있다.
- 쿠폰은 하나의 할인 정책, 하나의 할인 조건을 포함한다.
- 할인 정책은 3가지 종류가 존재한다.
- 고정 금액 할인 정책이 존재한다.
- 비율 할인 정책이 존재한다.
- 배달비 할인 정책이 존재한다.
- 할인 조건은 1가지 종류가 존재한다.
- 최소 주문 금액 조건
- 주문을 하는 경우 주문할 {상품 번호, 개수}의 배열 정보를 입력받는다.
- 쿠폰은 하나만 적용할 수 있다. 원한다면 적용하지 않아도 된다.
- 사용자는 주문 내역을 조회할 수 있다.
- 동시에 주문되는 경우 재고에 대한 부분을 어떻게 해결할지 고려하고, 이에 대한 테스트를 작성한다.
- 상품의 카테고리를 추가한다.
- 카테고리별 조회 기능을 추가한다.
- 요구사항 1에서 적용한 SHA-256을 패스워드 저장시 사용하면 어떤 문제가 발생하는가?
- https://d2.naver.com/helloworld/318732 를 확인하고 개선해보자.
- 쿠폰의 유효기간을 추가한다.
- 유효기간이 지난 쿠폰을 사용하려는 경우 예외를 발생시킨다.
- 주문에 상태를 추가한다.
- 주문 완료
- 주문 취소
- 주문 취소 기능을 추가한다.
- 주문이 취소된다면, 주문시 사용한 사용자의 쿠폰이 다시 복구되어야 한다.