Skip to content

Commit

Permalink
Merge pull request #116 from prgrms-be-devcourse/feature/NAYB-137
Browse files Browse the repository at this point in the history
[NAYB-137] 구매자는 주문내역을 삭제 할 수 있다.
  • Loading branch information
seongHyun-Min authored Sep 19, 2023
2 parents f5db0b7 + e130009 commit e7a9291
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
Expand Down Expand Up @@ -73,6 +74,15 @@ public ResponseEntity<FindOrdersResponse> findOrders(
return ResponseEntity.ok(orderService.findOrders(userId, page));
}

@DeleteMapping("/{orderId}")
public ResponseEntity<Void> deleteOrder(
@PathVariable Long orderId,
@LoginUser Long userId
) {
orderService.deleteOrder(orderId, userId);
return ResponseEntity.noContent().build();
}

@ExceptionHandler(OrderException.class)
public ResponseEntity<ErrorTemplate> handleException(
final OrderException orderException) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface OrderRepository extends JpaRepository<Order, Long> {

Expand All @@ -20,8 +21,8 @@ public interface OrderRepository extends JpaRepository<Order, Long> {
Optional<Order> findByUuidAndUser_UserId(String uuid, Long userId);

@Query("SELECT o FROM Order o WHERE o.createdAt <= :expiredTime AND o.status IN :statusList")
List<Order> findByStatusInBeforeExpiredTime(LocalDateTime expiredTime,
List<OrderStatus> statusList);
List<Order> findByStatusInBeforeExpiredTime(@Param("expiredTime") LocalDateTime expiredTime,
@Param("statusList") List<OrderStatus> statusList);

void deleteByUser(User findUser);
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,22 @@ public void updateOrderStatus() {
}
}

@Transactional
public void cancelOrder(final Order order) {
order.updateOrderStatus(OrderStatus.CANCELED);
order.unUseCoupon();
order.getOrderItems().forEach(
orderItem -> itemRepository.increaseQuantity(orderItem.getItem().getItemId(),
orderItem.getQuantity())
);
}

@Transactional
public void deleteOrder(final Long orderId, final Long userId) {
Order order = getOrderByOrderIdAndUserId(orderId, userId);
orderRepository.delete(order);
}

private static void updateItemQuantity(Order order) {
List<OrderItem> orderItems = order.getOrderItems();
for (OrderItem orderItem : orderItems) {
Expand Down Expand Up @@ -159,14 +175,4 @@ private Item findItemByItemId(final Long itemId) {
return itemRepository.findByItemId(itemId)
.orElseThrow(() -> new NotFoundItemException("존재하지 않는 상품입니다."));
}

@Transactional
public void cancelOrder(final Order order) {
order.updateOrderStatus(OrderStatus.CANCELED);
order.unUseCoupon();
order.getOrderItems().forEach(
orderItem -> itemRepository.increaseQuantity(orderItem.getItem().getItemId(),
orderItem.getQuantity())
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.delete;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post;
import static org.springframework.restdocs.payload.JsonFieldType.NUMBER;
Expand Down Expand Up @@ -199,4 +200,28 @@ void createOrder() throws Exception {
)));
}
}

@Nested
@DisplayName("deleteOrder 메서드 실행 시")
class DeleteOrder {

@Test
@DisplayName("성공")
void deleteOrder() throws Exception {
// given
User user = user();
Order order = pendingOrder(1L, user);

// when
ResultActions result = mockMvc.perform(
delete("/api/v1/orders/{orderId}", order.getOrderId())
.header(AUTHORIZATION, accessToken));

// then
result
.andExpect(status().isNoContent())
.andDo(restDocs.document(
));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,24 @@ void success() {
orderItem.getQuantity());
}
}
}

@Nested
@DisplayName("deleteOrder 메서드 실행 시")
class DeleteOrder {

@Test
@DisplayName("성공")
void success() {
// given
Order order = pendingOrder(1L, user());

// when
when(orderRepository.findByOrderIdAndUser_UserId(order.getOrderId(),
user().getUserId())).thenReturn(Optional.of(order));
orderService.deleteOrder(order.getOrderId(), user().getUserId());

// then
verify(orderRepository, times(1)).delete(order);
}
}
}

0 comments on commit e7a9291

Please sign in to comment.