Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ public interface DeliveryRepository extends JpaRepository<Delivery, Long> {
boolean existsDeliveryByOrderId(Long orderId);

Optional<Delivery> findTopByOrder_IdOrderByIdDesc(Long orderId);

void deleteByOrder_Id(Long orderId);
}
4 changes: 4 additions & 0 deletions src/main/java/org/sopt/poti/domain/order/entity/Order.java
Original file line number Diff line number Diff line change
Expand Up @@ -151,4 +151,8 @@ public void completeDelivery() {
this.status = OrderStatus.DELIVERED;
}

public void updateStatus(OrderStatus status) {
this.status = status;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@
public interface PaymentRepository extends JpaRepository<Payment, Long> {

boolean existsByOrder_Id(Long orderId);

void deleteByOrder_Id(Long orderId);
}
15 changes: 15 additions & 0 deletions src/main/java/org/sopt/poti/global/dev/DevController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.RequiredArgsConstructor;
import org.sopt.poti.domain.auth.entity.RefreshToken;
import org.sopt.poti.domain.auth.repository.RefreshTokenRepository;
import org.sopt.poti.domain.order.entity.OrderStatus;
import org.sopt.poti.domain.user.entity.User;
import org.sopt.poti.domain.user.service.UserService;
import org.sopt.poti.global.common.ApiResponse;
Expand All @@ -18,6 +19,8 @@
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
Expand Down Expand Up @@ -72,4 +75,16 @@ public ResponseEntity<ApiResponse<Void>> hardDeleteMe(
ApiResponse.success(SuccessStatus.OK)
);
}

@PatchMapping("/orders/{orderId}/status")
@Operation(summary = "주문 상태 강제 변경", description = "테스트를 위해 특정 주문의 상태를 강제로 변경합니다. (WAIT_PAY로 변경 시 연관 데이터 삭제됨)")
public ResponseEntity<ApiResponse<Void>> resetOrderStatus(
@PathVariable Long orderId,
@RequestParam OrderStatus status
) {
devService.resetOrderStatus(orderId, status);
return ResponseEntity.ok(
ApiResponse.success(SuccessStatus.OK)
);
}
}
32 changes: 31 additions & 1 deletion src/main/java/org/sopt/poti/global/dev/DevService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,24 @@

import java.util.List;
import lombok.RequiredArgsConstructor;
import org.sopt.poti.domain.delivery.repository.DeliveryRepository;
import org.sopt.poti.domain.groupbuy.entity.GroupBuyOption;
import org.sopt.poti.domain.groupbuy.entity.GroupBuyPost;
import org.sopt.poti.domain.groupbuy.repository.GroupBuyRepository;
import org.sopt.poti.domain.order.entity.Order;
import org.sopt.poti.domain.order.entity.OrderStatus;
import org.sopt.poti.domain.order.repository.OrderItemRepository;
import org.sopt.poti.domain.order.repository.OrderRepository;
import org.sopt.poti.domain.payment.repository.PaymentRepository;
import org.sopt.poti.domain.user.repository.UserRepository;
import org.sopt.poti.global.error.BusinessException;
import org.sopt.poti.global.error.ErrorStatus;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

// ... (기존 imports)

@Service
@RequiredArgsConstructor
@Profile({"local", "dev"})
Expand All @@ -21,10 +29,11 @@ public class DevService {
private final GroupBuyRepository groupBuyRepository;
private final OrderRepository orderRepository;
private final OrderItemRepository orderItemRepository;
private final PaymentRepository paymentRepository; // 추가
private final DeliveryRepository deliveryRepository; // 추가

@Transactional
public void hardDeleteUser(Long userId) {
// 1. 유저가 총대로서 올린 게시글과 관련된 '타인의 주문 내역(OrderItem)' 삭제
List<GroupBuyPost> myPosts = groupBuyRepository.findAllByLeaderId(userId);

List<Long> myOptionIds = myPosts.stream()
Expand All @@ -45,4 +54,25 @@ public void hardDeleteUser(Long userId) {
// 4. 유저 삭제
userRepository.deleteById(userId);
}

// 주문 상태 강제 변경 (테스트용)
@Transactional
public void resetOrderStatus(Long orderId, OrderStatus targetStatus) {
Order order = orderRepository.findById(orderId)
.orElseThrow(() -> new BusinessException(ErrorStatus.ORDER_NOT_FOUND));

// 목표 상태에 따라 연관 데이터 정리
if (targetStatus == OrderStatus.WAIT_PAY) {
// WAIT_PAY로 초기화 시, 입금 정보와 운송장 정보 모두 삭제
paymentRepository.deleteByOrder_Id(orderId);
deliveryRepository.deleteByOrder_Id(orderId);
} else if (targetStatus == OrderStatus.WAIT_PAY_CHECK || targetStatus == OrderStatus.PAID) {
// WAIT_PAY_CHECK 또는 PAID로 초기화 시, 운송장 정보만 삭제 (입금 정보는 유지)
deliveryRepository.deleteByOrder_Id(orderId);
}
// SHIPPED, DELIVERED 등 그 이상 상태로 변경 시에는 삭제할 것이 없음

// 주문 상태 변경 적용
order.updateStatus(targetStatus);
}
}
15 changes: 14 additions & 1 deletion src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ server:
multipart:
max-file-size: 10MB
max-request-size: 10MB

forward-headers-strategy: framework

spring:
application:
name: poti-server
Expand Down Expand Up @@ -94,6 +95,18 @@ logging:
root: INFO
org.sopt: DEBUG

springdoc:
api-docs:
path: /v3/api-docs # JSON 데이터 경로
enabled: true
swagger-ui:
path: /swagger-ui/index.html # UI 접속 경로
enabled: true
groups-order: DESC # 그룹 정렬 순서
operations-sorter: method # 메소드 순서대로 정렬
disable-swagger-default-url: true # 기본 petstore URL 끄기
display-request-duration: true # 요청 소요 시간 표시

discord:
webhook-url: ${DISCORD_WEBHOOK}

Expand Down