feat(customer-vue, order service): 장바구니 아이템 삭제기능 추가
- 장바구니 아이템 삭제기능 추가
This commit is contained in:
@@ -43,7 +43,7 @@ public class Order extends BaseEntity {
|
||||
private Transaction transaction;
|
||||
|
||||
@BatchSize(size = 100)
|
||||
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
|
||||
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
|
||||
private List<OrderItem> orderItems = new ArrayList<>();
|
||||
|
||||
public static Order of(Long userId, Long userCouponId, Long storeId, OrderItem orderItem) {
|
||||
@@ -83,6 +83,13 @@ public class Order extends BaseEntity {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Order deleteOrderItem(OrderItem orderItem) {
|
||||
this.orderPrice -= orderItem.getTotalPrice();
|
||||
this.orderItems.remove(orderItem);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public void setOrderStatus(OrderStatus orderStatus){
|
||||
this.orderStatus = orderStatus;
|
||||
}
|
||||
@@ -105,4 +112,9 @@ public class Order extends BaseEntity {
|
||||
public void fail() {
|
||||
this.orderStatus = OrderStatus.FAILED;
|
||||
}
|
||||
|
||||
|
||||
public void changeOrderDate(LocalDateTime orderTime){
|
||||
this.orderTime = orderTime;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,5 +7,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface OrderRepository extends JpaRepository<Order, Long> {
|
||||
Long countByUserIdAndOrderStatus(Long userId, OrderStatus orderStatus);
|
||||
Optional<Order> findByUserIdAndOrderStatus(Long userId, OrderStatus orderStatus);
|
||||
|
||||
}
|
||||
|
||||
@@ -175,12 +175,16 @@ public class OrderServiceImpl implements OrderService {
|
||||
//HARD_CODE
|
||||
Long userCouponId=0L;
|
||||
|
||||
Long countByUserIdAndOrderStatus = orderRepository.countByUserIdAndOrderStatus(userId, OrderStatus.PENDING);
|
||||
if(countByUserIdAndOrderStatus>=2) throw new OrderException("장바구니 데이터는 2건 이상 일 수 없습니다.");
|
||||
|
||||
Optional<Order> optionalOrder = orderRepository.findByUserIdAndOrderStatus(userId, OrderStatus.PENDING);
|
||||
if(optionalOrder.isPresent()){
|
||||
if(!optionalOrder.get().addOrderItem(orderItem)
|
||||
.getStoreId().equals(storeId))
|
||||
throw new OrderException("장바구니에 여러 카페의 메뉴를 담을수 없습니다.");
|
||||
}else{
|
||||
|
||||
orderRepository.save(Order.of(userId,userCouponId,storeId,orderItem));
|
||||
}
|
||||
}
|
||||
@@ -189,6 +193,9 @@ public class OrderServiceImpl implements OrderService {
|
||||
public FetchOrderDto fetchOrder(Long userId) {
|
||||
Order order = orderRepositoryCustom.fetchOrderBasket(userId)
|
||||
.orElseThrow(() -> new OrderException("장바구니 정보를 찾을 수 없습니다."));
|
||||
|
||||
|
||||
|
||||
GetStoreResponse store = storeClient.getStore(String.valueOf(order.getStoreId())).getData();
|
||||
|
||||
List<GetItemResponse> data = storeClient.getItemAndItemOptions(order.getOrderItems().stream()
|
||||
@@ -253,8 +260,6 @@ public class OrderServiceImpl implements OrderService {
|
||||
// 일주일 판매금액( 일별 )
|
||||
List<DashBoardDto.SellAmountAWeek> sellAmountAWeeks = orderRepositoryCustom.salesAmountBetweenAWeek(storeId);
|
||||
|
||||
log.info("asdad");
|
||||
|
||||
return DashBoardDto.of(orderPrices , bestSellItem, sellAmountAWeeks);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.justpickup.orderservice.domain.orderItem.service;
|
||||
|
||||
import com.justpickup.orderservice.domain.order.entity.Order;
|
||||
import com.justpickup.orderservice.domain.order.entity.OrderStatus;
|
||||
import com.justpickup.orderservice.domain.order.exception.OrderException;
|
||||
import com.justpickup.orderservice.domain.order.repository.OrderRepository;
|
||||
import com.justpickup.orderservice.domain.order.repository.OrderRepositoryCustom;
|
||||
import com.justpickup.orderservice.domain.orderItem.entity.OrderItem;
|
||||
import com.justpickup.orderservice.domain.orderItem.repository.OrderItemRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Transactional(readOnly = true)
|
||||
public class OrderItemService {
|
||||
|
||||
private final OrderItemRepository orderItemRepository;
|
||||
private final OrderRepository orderRepository;
|
||||
private final OrderRepositoryCustom orderRepositoryCustom;
|
||||
|
||||
@Transactional
|
||||
public void deleteOrderItem(Long deleteOrderItemId, Long userId){
|
||||
|
||||
|
||||
Order order = orderRepositoryCustom.fetchOrderBasket(userId)
|
||||
.orElseThrow(() -> new OrderException("존재하지 않는 장바구니 아이템입니다."));
|
||||
|
||||
OrderItem orderItem = orderItemRepository.findById(deleteOrderItemId)
|
||||
.orElseThrow(() -> new OrderException("존재하지 않는 장바구니 아이템입니다."));
|
||||
|
||||
order.deleteOrderItem(orderItem);
|
||||
|
||||
if(order.getOrderItems().size() ==0)
|
||||
orderRepository.delete(order);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.justpickup.orderservice.domain.orderItem.web;
|
||||
|
||||
import com.justpickup.orderservice.domain.orderItem.service.OrderItemService;
|
||||
import com.justpickup.orderservice.global.dto.Result;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/api/customer/orderItem")
|
||||
public class OrderItemCustomerApiController {
|
||||
|
||||
private final OrderItemService orderItemService;
|
||||
|
||||
@DeleteMapping("/{orderItemId}")
|
||||
public ResponseEntity deleteOrderItem(@PathVariable Long orderItemId,
|
||||
@RequestHeader(value = "user-id") String userId){
|
||||
orderItemService.deleteOrderItem(orderItemId,Long.parseLong(userId));
|
||||
|
||||
return ResponseEntity.status(HttpStatus.OK).body(Result.createSuccessResult(orderItemId));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user