Skip to content

Commit 9d80f77

Browse files
authored
Merge branch 'GoodSpace-Kr:main' into main
2 parents f62f9f6 + 56c72e0 commit 9d80f77

5 files changed

Lines changed: 66 additions & 12 deletions

File tree

src/main/java/goodspace/backend/admin/controller/OrderManageController.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,17 @@ public ResponseEntity<Void> deleteOrder(@RequestParam Long orderId) {
5555
return ResponseEntity.noContent().build();
5656
}
5757

58+
@PatchMapping("/accept")
59+
@Operation(
60+
summary = "주문 수락",
61+
description = "결제가 완료된 주문을 수락합니다. 주문의 상태를 '제작 준비중'에서 '제작중'으로 전이합니다."
62+
)
63+
public ResponseEntity<Void> acceptOrder(@RequestParam Long orderId) {
64+
orderManageService.acceptOrder(orderId);
65+
66+
return ResponseEntity.noContent().build();
67+
}
68+
5869
@PostMapping("/payment/issue")
5970
@Operation(
6071
summary = "결제 에러 이슈",

src/main/java/goodspace/backend/cart/domain/CartItem.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,8 @@ public class CartItem extends BaseEntity {
4040
public void updateQuantity(Integer quantity) {
4141
this.quantity = quantity;
4242
}
43+
44+
public Long getItemId() {
45+
return item.getId();
46+
}
4347
}

src/main/java/goodspace/backend/global/exception/GlobalExceptionHandler.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package goodspace.backend.global.exception;
22

3-
import io.jsonwebtoken.MalformedJwtException;
3+
import io.jsonwebtoken.JwtException;
44
import jakarta.persistence.EntityNotFoundException;
55
import lombok.extern.slf4j.Slf4j;
66
import org.hibernate.exception.ConstraintViolationException;
77
import org.springframework.dao.DataIntegrityViolationException;
88
import org.springframework.http.ResponseEntity;
99
import org.springframework.http.converter.HttpMessageNotReadableException;
1010
import org.springframework.validation.FieldError;
11+
import org.springframework.web.HttpMediaTypeNotSupportedException;
12+
import org.springframework.web.HttpRequestMethodNotSupportedException;
1113
import org.springframework.web.bind.MethodArgumentNotValidException;
1214
import org.springframework.web.bind.annotation.ExceptionHandler;
1315
import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -76,9 +78,9 @@ public ResponseEntity<String> handleIllegalState(IllegalStateException exception
7678
return ResponseEntity.status(BAD_REQUEST).body("Illegal state: " + exception.getMessage());
7779
}
7880

79-
@ExceptionHandler(MalformedJwtException.class)
80-
public ResponseEntity<String> handleIllegalJwt(MalformedJwtException exception) {
81-
log.info("[ERROR RESPONSE] malformed jwt", exception);
81+
@ExceptionHandler(JwtException.class)
82+
public ResponseEntity<String> handleIllegalJwt(JwtException exception) {
83+
log.info("[ERROR RESPONSE] illegal jwt", exception);
8284

8385
return ResponseEntity.status(UNAUTHORIZED).body("부적절한 JWT 토큰입니다: " + exception.getMessage());
8486
}
@@ -90,6 +92,20 @@ public ResponseEntity<String> handleIllegalJson(HttpMessageNotReadableException
9092
return ResponseEntity.status(BAD_REQUEST).body("JSON 파싱에 실패했습니다: " + exception.getMessage());
9193
}
9294

95+
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
96+
public ResponseEntity<String> handleIllegalHttpMethod(HttpRequestMethodNotSupportedException exception) {
97+
log.info("[ERROR RESPONSE] http message not supported", exception);
98+
99+
return ResponseEntity.status(METHOD_NOT_ALLOWED).body("부적절한 HTTP 메서드입니다: " + exception.getMessage());
100+
}
101+
102+
@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
103+
public ResponseEntity<String> handleIllegalMediaType(HttpMediaTypeNotSupportedException exception) {
104+
log.info("[ERROR RESPONSE] media type not supported", exception);
105+
106+
return ResponseEntity.status(METHOD_NOT_ALLOWED).body("부적절한 Content-Type 혹은 Accept입니다: " + exception.getMessage());
107+
}
108+
93109
@ExceptionHandler(SQLException.class)
94110
public ResponseEntity<String> handleSQLException(SQLException exception) {
95111
log.warn("[ERROR RESPONSE] sql exception", exception);

src/main/java/goodspace/backend/order/dto/OrderRequestDto.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package goodspace.backend.order.dto;
22

3-
import goodspace.backend.user.domain.DeliveryInfo;
43
import lombok.AllArgsConstructor;
54
import lombok.Getter;
65
import lombok.NoArgsConstructor;
@@ -13,5 +12,6 @@
1312
public class OrderRequestDto {
1413
private List<OrderCartItemDto> orderCartItemDtos;
1514
private OrderInfoDto orderInfo;
16-
private Boolean requireUpdateUserInfo;
15+
private boolean requireUpdateUserInfo;
16+
private boolean requireCartItemRemove;
1717
}

src/main/java/goodspace/backend/order/service/OrderService.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,50 @@
11
package 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;
37
import goodspace.backend.global.security.TokenProvider;
48
import goodspace.backend.order.domain.Order;
59
import goodspace.backend.order.domain.OrderCartItem;
6-
import goodspace.backend.global.domain.Item;
7-
import goodspace.backend.user.domain.User;
810
import goodspace.backend.order.dto.OrderCartItemDto;
911
import goodspace.backend.order.dto.OrderRequestDto;
1012
import goodspace.backend.order.dto.OrderResponseDto;
11-
import goodspace.backend.global.repository.ItemRepository;
1213
import goodspace.backend.order.repository.OrderRepository;
14+
import goodspace.backend.user.domain.User;
1315
import goodspace.backend.user.repository.UserRepository;
1416
import lombok.RequiredArgsConstructor;
1517
import org.springframework.stereotype.Service;
1618

1719
import java.security.Principal;
1820
import 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
2329
public 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

Comments
 (0)