package com.tcm.training.admin.live.controller; import com.tcm.training.admin.common.ApiResponse; import com.tcm.training.admin.common.PageResponse; import com.tcm.training.admin.live.dto.CoursePurchaseOrderRefundRequest; import com.tcm.training.admin.live.service.CoursePurchaseOrderAppService; import com.tcm.training.admin.live.vo.CoursePurchaseOrderListItemVO; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; import java.time.LocalDateTime; @Validated @RestController @RequestMapping({"/api/v1", "/api"}) public class CoursePurchaseOrderController { private final CoursePurchaseOrderAppService coursePurchaseOrderAppService; public CoursePurchaseOrderController(CoursePurchaseOrderAppService coursePurchaseOrderAppService) { this.coursePurchaseOrderAppService = coursePurchaseOrderAppService; } @GetMapping("/course/purchase-orders") public ApiResponse> page( @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int pageSize, @RequestParam(required = false) String orderNo, @RequestParam(required = false) String userPhone, @RequestParam(required = false) String productName, @RequestParam(required = false) String paymentMethod, @RequestParam(required = false) String status, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdTo) { return ApiResponse.ok(coursePurchaseOrderAppService.page( page, pageSize, orderNo, userPhone, productName, paymentMethod, status, createdFrom, createdTo )); } @GetMapping("/course/purchase-orders/export") public void export(HttpServletResponse response, @RequestParam(required = false) String orderNo, @RequestParam(required = false) String userPhone, @RequestParam(required = false) String productName, @RequestParam(required = false) String paymentMethod, @RequestParam(required = false) String status, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdTo) throws IOException { coursePurchaseOrderAppService.export(response, orderNo, userPhone, productName, paymentMethod, status, createdFrom, createdTo); } @PostMapping("/course/purchase-orders/{id}/refund") public ApiResponse refund(@PathVariable Long id, @Valid @RequestBody CoursePurchaseOrderRefundRequest request) { coursePurchaseOrderAppService.refund(id, request); return ApiResponse.ok(null); } @DeleteMapping("/course/purchase-orders/{id}") public ApiResponse delete(@PathVariable Long id) { coursePurchaseOrderAppService.delete(id); return ApiResponse.ok(null); } }