회원(Member)관리
회원 가입 :
- 회원은 이메일(ID), 비밀번호, 별명, 주소, 우편번호, 권한(ROLE_MEMBER/ROLE_GUEST)을 입력하여 가입 가능
- 고유 Email과 RefreshToken 회원에게 지급
회원 정보 조회 :
- 회원의 기본 정보 조회 기능
회원 권한 :
- 회원은 ROLE_MEMBER 또는 ROLE_GUEST 권한을 획득
특정 기능 사용 제한 설정 가능
비즈니스 로직 :
- Email과 RefreshToken은 고유하며, 중복 불가
각 회원은 단일 Cart와 관계
장바구니(Cart)관리
상품 추가:
회원은 상품(Product)을 장바구니에 추가하며, 추가된 상품의 ID와 수량은 CartProduct 엔티티에 저장
장바구니 조회:
회원은 장바구니에 담긴 상품 리스트를 조회하며, 총 가격 계산 로직 포함
장바구니 수정:
장바구니에 담긴 특정 상품의 수량 변경 가능
장바구니 초기화:
주문(Order) 생성 시 장바구니 초기화
비즈니스 로직:
각 회원은 단일 Cart와 관계를 맺으며, 하나의 Cart는 여러 CartProduct를 포함
Cart의 getTotalPrice() 메서드는 CartProduct의 상품 가격과 수량을 기반으로 총 가격 반환
상품(Product) 관리
상품 등록:
회원은 상품 정보를 입력하여 상품을 등록하고 등록된 상품은 Product 엔티티에 저장
상품 수정:
등록된 상품의 가격, 설명, 재고 수정 가능
상품 조회:
모든 등록된 상품을 조회하거나 특정 상품 ID로 세부 정보 확인 가능
비즈니스 로직:
상품은 이름(name), 가격(price), 설명(description), 카테고리(category), 재고(stock) 필드를 필수로 가짐
특정 회원이 등록한 상품은 해당 회원과 관계를 맺음
주문(Order) 관리
주문 생성:
회원은 장바구니에 담긴 상품으로 주문 생성 가능
장바구니의 총 가격(getTotalPrice)은 Order에 저장
주문 조회:
회원은 자신이 생성한 모든 주문을 조회하거나 특정 주문 ID로 세부 정보 확인 가능
주문 상태 변경:
주문 상태(orderType)는 ORDERED, DELIVERY, PAID, CANCELED로 변경 가능
주문 삭제:
회원은 특정 주문 삭제 가능
비즈니스 로직:
주문 생성 시 장바구니 초기화, 주문 내역(Order)에 장바구니 정보(Cart)와 소비자(Member) 정보 저장
각 주문은 단일 Cart와 연결
장바구니(Cart)와 상품(Product) 관계
다대다[N:M] / @Manytomany
- 장바구니는 여러개의 상품을 가질 수 있다.
- 상품은 여러개의 장바구니에 속할 수 있다.
CartProduck Entity를 만들어 card_id, product_id, quantity 정보를 관리하여 중개한다.
비즈니스 로직
CartProduct는 상품 ID와 수량 정보를 기반으로 각 상품의 총 가격을 계산.
Cart는 CartProduct의 정보를 통해 총 가격 (getTotalPrice()) 계산.
추가 비즈니스 규칙
- 데이터 유효성 검증
모든 필드는 적절한 유효성 검사를 통과해야 한다.
예시 : 가격(price)은 0 이상의 양수여야 하며, 이메일 형식이 올바르지 않으면 예외 처리한다.
연관 관계
- Member와 Cart는 1:1 관계 유지 / @OneToOne
- Cart와 Order는 N:1 관계 유지 / @ManyToOne
- Product는 Member와 N:1 관계 유지 @ManyToOne