-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[feat] 구매자는 장바구니에 담긴 상품을 주문할 수 있다 (#80)
* [feat] Order 생성자 수정 주문하기 전에 OrderValidator를 통해 검증한다. * [feat] SingleStoreOrderValidator 동일한 가게에 대한 주문인지 검증 * [feat] PayAmountValidator 잔고가 부족하면 주문할 수 없습니다. * [fix] CustomerRepository의 Id 변경 Long -> UUID * [chore] .gitkeep 삭제 * [feat] OrderCreationService 구현 Composite 패턴으로 Validator를 Order 생성자에 넘긴다. * [feat] OrderRepository * [feat] OrderItem * [fix] Cart는 Menu가 아니라 CartItem 리스트를 가진다. 수량을 반영하기 위해 MenuId를 가지는 CartItem으로 수정 * [fix] 카트에 담긴 상품의 총합을 조회하기 위해서는 Repository를 조회한다 상품의 가격은 변동될 수 있습니다. 카트에 담긴 상품의 총합은 (카트에 담긴 시점의 가격이 아니라) 변동된 가격을 기준으로 계산되어야 합니다. * [test] Cart 도메인 변경으로 인한 테스트 코드 수정 Cart.getTotalPrice 삭제로 인한 테스트 코드 수정 Menu -> CartItem 으로 인한 테스트 코드 수정 * [feat] Order 도메인 설계 주문 생성시 1)동일한 가게의 메뉴에 대한 주문인지 2)재고가 있는지 검증 후 생성한다. * [feat] Menu 재고 삭감 서비스 주문 생성시 해당 메뉴의 재고를 삭감하는 서비스 * [feat] Menu 검증 서비스 주문은 같은 가게의 메뉴만 주문할 수 있다. * [feat] 주문 생성 서비스 주문은 1)같은 가게의 메뉴에 대해 2)재고가 있고 3)결제할 포인트가 충분할 때 진행할 수 있다. * [feat] PriceChecker 구현 Menu의 현재 가격으로 OrderItem을 만들어주는 검증 서비스 * [feat] 주문 결제 서비스 주문 금액만큼 사용자의 계좌에서 차감하는 서비스 * [refactor] 자바 컨벤션에 맞게 수정 * [refactor] OrderCreationService 내부 코드 정리 Optional.orElseThrow() 활용해서 if-else문 제거 * [test] OrderCreationservice 테스트 코드 작성 * [fix] 에러 메시지 구체화 조회 시도한 Customer의 id를 명시 * [refactor] 가독성 향상 * [feat] 최소 주문금액 확인 로직 추가 현재 Menu의 가격을 조회하면서 최소 주문금액 이상을 주문하였는지 확인 * [test] 최소 주문금액 확인 로직 추가 현재 Menu의 가격을 조회하면서 최소 주문금액 이상을 주문하였는지 확인 * [refactor] 메서드로 추출 * [refactor] RequiredArgsConstructor 적용 * [fix] 중복된 검증 로직 제거 OrderCreationService에서 Store를 조회하던 로직 제거 SingleStoreOrderValidator에서 검증된 단일 Store를 반환 * [test] 중복된 검증 로직 제거 OrderCreationService에서 Store를 조회하던 로직 제거 SingleStoreOrderValidator에서 검증된 단일 Store를 반환 * [feat] 재고 부족한 경우 예외 처리 메뉴의 재고가 부족하면 NotEnoughStockExceptioh이 발생합니다. * [docs] 내부 예외 주석 내부적으로 발생하는 RuntimeException에 대한 주석 추가 * [feat] 주문 endpoint 생성 * [test] 주문 endpoint 테스트 * [fix] static 삭제
- Loading branch information
Showing
37 changed files
with
1,142 additions
and
70 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
46 changes: 46 additions & 0 deletions
46
src/main/java/camp/woowak/lab/cart/domain/vo/CartItem.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package camp.woowak.lab.cart.domain.vo; | ||
|
||
import java.util.Objects; | ||
|
||
public class CartItem { | ||
private final Long menuId; | ||
private final Long storeId; | ||
private final int amount; | ||
|
||
public CartItem(Long menuId, Long storeId, Integer amount) { | ||
this.menuId = menuId; | ||
this.storeId = storeId; | ||
this.amount = amount; | ||
} | ||
|
||
public Long getMenuId() { | ||
return menuId; | ||
} | ||
|
||
public Long getStoreId() { | ||
return storeId; | ||
} | ||
|
||
public int getAmount() { | ||
return amount; | ||
} | ||
|
||
public CartItem add(Integer increment) { | ||
return new CartItem(menuId, storeId, amount + increment); | ||
} | ||
|
||
@Override | ||
public boolean equals(Object o) { | ||
if (this == o) | ||
return true; | ||
if (!(o instanceof CartItem item)) | ||
return false; | ||
return Objects.equals(menuId, item.menuId) && Objects.equals(storeId, item.storeId) | ||
&& Objects.equals(amount, item.amount); | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
return Objects.hash(menuId, storeId, amount); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9 changes: 9 additions & 0 deletions
9
src/main/java/camp/woowak/lab/customer/exception/NotFoundCustomerException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package camp.woowak.lab.customer.exception; | ||
|
||
import camp.woowak.lab.common.exception.NotFoundException; | ||
|
||
public class NotFoundCustomerException extends NotFoundException { | ||
public NotFoundCustomerException(String message) { | ||
super(CustomerErrorCode.NOT_FOUND, message); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9 changes: 9 additions & 0 deletions
9
src/main/java/camp/woowak/lab/menu/exception/NotEnoughStockException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package camp.woowak.lab.menu.exception; | ||
|
||
import camp.woowak.lab.common.exception.BadRequestException; | ||
|
||
public class NotEnoughStockException extends BadRequestException { | ||
public NotEnoughStockException(String message) { | ||
super(MenuErrorCode.NOT_ENOUGH_STOCK, message); | ||
} | ||
} |
7 changes: 7 additions & 0 deletions
7
src/main/java/camp/woowak/lab/menu/repository/MenuRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,21 @@ | ||
package camp.woowak.lab.menu.repository; | ||
|
||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.data.jpa.repository.Lock; | ||
import org.springframework.data.jpa.repository.Query; | ||
import org.springframework.data.repository.query.Param; | ||
|
||
import camp.woowak.lab.menu.domain.Menu; | ||
import jakarta.persistence.LockModeType; | ||
|
||
public interface MenuRepository extends JpaRepository<Menu, Long> { | ||
@Query("SELECT m FROM Menu m JOIN FETCH m.store WHERE m.id = :id") | ||
Optional<Menu> findByIdWithStore(@Param("id") Long id); | ||
|
||
@Lock(LockModeType.PESSIMISTIC_WRITE) | ||
@Query("SELECT m FROM Menu m where m.id in :ids") | ||
List<Menu> findAllByIdForUpdate(List<Long> ids); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.