11package goodspace .backend .order .service ;
22
3+ import goodspace .backend .cart .domain .CartItem ;
4+ import goodspace .backend .global .domain .Item ;
5+ import goodspace .backend .global .repository .CartItemRepository ;
6+ import goodspace .backend .global .repository .ItemRepository ;
37import goodspace .backend .global .security .TokenProvider ;
48import goodspace .backend .order .domain .Order ;
59import goodspace .backend .order .domain .OrderCartItem ;
6- import goodspace .backend .global .domain .Item ;
7- import goodspace .backend .user .domain .User ;
810import goodspace .backend .order .dto .OrderCartItemDto ;
911import goodspace .backend .order .dto .OrderRequestDto ;
1012import goodspace .backend .order .dto .OrderResponseDto ;
11- import goodspace .backend .global .repository .ItemRepository ;
1213import goodspace .backend .order .repository .OrderRepository ;
14+ import goodspace .backend .user .domain .User ;
1315import goodspace .backend .user .repository .UserRepository ;
1416import lombok .RequiredArgsConstructor ;
1517import org .springframework .stereotype .Service ;
1618
1719import java .security .Principal ;
1820import java .util .List ;
19- import java .util .stream .Collectors ;
21+ import java .util .Map ;
22+ import java .util .Objects ;
23+
24+ import static java .util .stream .Collectors .toList ;
25+ import static java .util .stream .Collectors .toMap ;
2026
2127@ Service
2228@ RequiredArgsConstructor
2329public class OrderService {
2430 private final UserRepository userRepository ;
2531 private final OrderRepository orderRepository ;
2632 private final ItemRepository itemRepository ;
33+ private final CartItemRepository cartItemRepository ;
2734
2835 //TODO - error handling
2936 public Long saveOrder (Principal principal , OrderRequestDto orderRequest ) {
3037 User user = userRepository .findById (TokenProvider .getUserIdFromPrincipal (principal ))
3138 .orElseThrow (() -> new IllegalArgumentException ("Order엔티티에 User를 매핑하는 Service과정에서 User를 찾는 것을 실패했습니다." ));
3239
33- if (orderRequest .getRequireUpdateUserInfo ()) {
40+ if (orderRequest .isRequireUpdateUserInfo ()) {
3441 user .update (orderRequest .getOrderInfo ());
3542 }
3643
44+ if (orderRequest .isRequireCartItemRemove ()) {
45+ removeCartItem (user , orderRequest .getOrderCartItemDtos ());
46+ }
47+
3748 Order order = Order .builder ()
3849 .user (user )
3950 .deliveryInfo (orderRequest .getOrderInfo ().toDeliveryInfo ())
@@ -49,7 +60,7 @@ public Long saveOrder(Principal principal, OrderRequestDto orderRequest) {
4960 .order (order )
5061 .build ();
5162 })
52- .collect (Collectors . toList ());
63+ .collect (toList ());
5364
5465 order .setOrderCartItems (orderCartItems );
5566 orderRepository .save (order );
@@ -83,4 +94,16 @@ public OrderResponseDto findOrderByOrderId(Long orderId) {
8394 .orderCartItemDtos (cartItemDtos )
8495 .build ();
8596 }
97+
98+ private void removeCartItem (User user , List <OrderCartItemDto > orderCartItemDtos ) {
99+ Map <Long , CartItem > cartItemMap = user .getCartItems ().stream ()
100+ .collect (toMap (CartItem ::getItemId , cartItem -> cartItem ));
101+
102+ List <CartItem > itemsToDelete = orderCartItemDtos .stream ()
103+ .map (dto -> cartItemMap .get (dto .getItemId ()))
104+ .filter (Objects ::nonNull )
105+ .toList ();
106+
107+ cartItemRepository .deleteAll (itemsToDelete );
108+ }
86109}
0 commit comments