RefundController.java
4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package com.ecommerce.payment.controller;
import com.ecommerce.payment.model.dto.RefundRequest;
import com.ecommerce.payment.service.RefundService;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/api/refunds")
@RequiredArgsConstructor
public class RefundController {
private final RefundService refundService;
@PostMapping
public ResponseEntity<Map<String, Object>> createRefund(@Valid @RequestBody RefundRequest request) {
Map<String, Object> response = refundService.createRefund(request);
return ResponseEntity.ok(response);
}
@GetMapping("/{refundId}")
public ResponseEntity<Map<String, Object>> getRefund(@PathVariable String refundId) {
Map<String, Object> response = refundService.getRefund(refundId);
return ResponseEntity.ok(response);
}
@GetMapping("/payment/{paymentId}")
public ResponseEntity<List<Map<String, Object>>> getRefundsByPayment(@PathVariable String paymentId) {
List<Map<String, Object>> refunds = refundService.getRefundsByPayment(paymentId);
return ResponseEntity.ok(refunds);
}
@GetMapping
public ResponseEntity<Map<String, Object>> getAllRefunds(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size,
@RequestParam(defaultValue = "createdAt") String sortBy,
@RequestParam(defaultValue = "desc") String sortDirection) {
Sort sort = sortDirection.equalsIgnoreCase("desc") ?
Sort.by(sortBy).descending() : Sort.by(sortBy).ascending();
Pageable pageable = PageRequest.of(page, size, sort);
Page<Map<String, Object>> refunds = refundService.getAllRefunds(pageable);
Map<String, Object> response = new HashMap<>();
response.put("refunds", refunds.getContent());
response.put("currentPage", refunds.getNumber());
response.put("totalItems", refunds.getTotalElements());
response.put("totalPages", refunds.getTotalPages());
return ResponseEntity.ok(response);
}
@GetMapping("/status/{status}")
public ResponseEntity<Map<String, Object>> getRefundsByStatus(
@PathVariable String status,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size) {
Pageable pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());
Page<Map<String, Object>> refunds = refundService.getRefundsByStatus(status, pageable);
Map<String, Object> response = new HashMap<>();
response.put("refunds", refunds.getContent());
response.put("currentPage", refunds.getNumber());
response.put("totalItems", refunds.getTotalElements());
response.put("totalPages", refunds.getTotalPages());
return ResponseEntity.ok(response);
}
@PostMapping("/{refundId}/cancel")
public ResponseEntity<Map<String, Object>> cancelRefund(
@PathVariable String refundId,
@RequestBody Map<String, String> request) {
String reason = request.get("reason");
Map<String, Object> response = refundService.cancelRefund(refundId, reason);
return ResponseEntity.ok(response);
}
@GetMapping("/statistics")
public ResponseEntity<Map<String, Object>> getRefundStatistics(
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startDate,
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endDate) {
Map<String, Object> statistics = refundService.getRefundStatistics(startDate, endDate);
return ResponseEntity.ok(statistics);
}
}