This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
package ru.soune.nocopy.controller;
|
||||
|
||||
|
||||
import jakarta.validation.Valid;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import ru.soune.nocopy.dto.payout.*;
|
||||
import ru.soune.nocopy.entity.payout.BankTransferPayoutMethod;
|
||||
import ru.soune.nocopy.entity.payout.CardPayoutMethod;
|
||||
import ru.soune.nocopy.entity.payout.PayoutRequest;
|
||||
import ru.soune.nocopy.entity.payout.PayoutType;
|
||||
import ru.soune.nocopy.service.payout.PayoutMethodService;
|
||||
import ru.soune.nocopy.service.payout.PayoutRequestService;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/payouts")
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class PayoutController {
|
||||
|
||||
private final PayoutRequestService payoutRequestService;
|
||||
|
||||
private final PayoutMethodService payoutMethodService;
|
||||
|
||||
/*
|
||||
Create payout
|
||||
*/
|
||||
@PostMapping("/create-request")
|
||||
public ResponseEntity<PayoutRequest> createPayoutRequest(@RequestParam Long userId,
|
||||
@Valid @RequestBody PayoutRequestDTO request) {
|
||||
PayoutRequest payoutRequest = payoutRequestService.createPayoutRequest(userId, request);
|
||||
|
||||
return ResponseEntity.status(HttpStatus.CREATED).body(payoutRequest);
|
||||
}
|
||||
|
||||
/*
|
||||
Completed payout
|
||||
*/
|
||||
@PostMapping("/requests/{requestId}/process")
|
||||
public ResponseEntity<PayoutRequest> processPayoutRequest(@PathVariable Long requestId) {
|
||||
PayoutRequest processed = payoutRequestService.processRequest(requestId);
|
||||
|
||||
return ResponseEntity.ok(processed);
|
||||
}
|
||||
|
||||
/*
|
||||
Cancel payout
|
||||
*/
|
||||
@PostMapping("/requests/{requestId}/{userId}/cancel")
|
||||
public ResponseEntity<PayoutRequest> cancelPayoutRequest(@PathVariable Long userId, @PathVariable Long requestId) {
|
||||
PayoutRequest cancelled = payoutRequestService.cancelPayoutRequest(userId, requestId);
|
||||
|
||||
return ResponseEntity.ok(cancelled);
|
||||
}
|
||||
|
||||
/*
|
||||
Get user payouts
|
||||
*/
|
||||
@GetMapping("/requests/{userId}")
|
||||
public ResponseEntity<List<PayoutRequest>> getUserRequests(@PathVariable Long userId) {
|
||||
return ResponseEntity.ok(payoutRequestService.getUserPayoutRequests(userId));
|
||||
}
|
||||
|
||||
/*
|
||||
Get payout by id
|
||||
*/
|
||||
@GetMapping("/requests/{requestId}/{userId}")
|
||||
public ResponseEntity<PayoutRequest> getPayoutRequest(@PathVariable Long userId, @PathVariable Long requestId) {
|
||||
return ResponseEntity.ok(payoutRequestService.getPayoutRequest(userId, requestId));
|
||||
}
|
||||
|
||||
/*
|
||||
Get payout by id
|
||||
*/
|
||||
@GetMapping("/payout-method/{userId}")
|
||||
public ResponseEntity<List<PayoutMethodDTO>> getUserMethods(@PathVariable Long userId) {
|
||||
return ResponseEntity.ok(payoutMethodService.getUserMethods(userId));
|
||||
}
|
||||
|
||||
/*
|
||||
Get payout-methods
|
||||
*/
|
||||
@GetMapping("/payout-method")
|
||||
public ResponseEntity<List<PayoutMethodTypeDTO>> getAvailableMethodTypes() {
|
||||
List<PayoutMethodTypeDTO> types = Arrays.stream(PayoutType.values())
|
||||
.map(type -> PayoutMethodTypeDTO.builder()
|
||||
.code(type.name())
|
||||
.name(type.getDisplayName())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return ResponseEntity.ok(types);
|
||||
}
|
||||
/*
|
||||
add card method by userId
|
||||
*/
|
||||
@PostMapping("/payout-method/card/{userId}")
|
||||
public ResponseEntity<PayoutMethodDTO> addCardMethod(@PathVariable Long userId,
|
||||
@Valid @RequestBody AddCardRequest request) {
|
||||
CardPayoutMethod method = payoutMethodService.addCardMethod(userId, request);
|
||||
return ResponseEntity.status(HttpStatus.CREATED)
|
||||
.body(payoutMethodService.convertToDto(method));
|
||||
}
|
||||
|
||||
/*
|
||||
add bank payout-method
|
||||
*/
|
||||
@PostMapping("/payout-method/bank-transfer/{userId}")
|
||||
public ResponseEntity<PayoutMethodDTO> addBankTransferMethod(@PathVariable Long userId,
|
||||
@Valid @RequestBody AddBankTransferRequest request) {
|
||||
BankTransferPayoutMethod method = payoutMethodService.addBankTransferMethod(userId, request);
|
||||
return ResponseEntity.status(HttpStatus.CREATED)
|
||||
.body(payoutMethodService.convertToDto(method));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
set default bank payout-method
|
||||
*/
|
||||
@PutMapping("/payout-method/{userId}/{methodId}/default")
|
||||
public ResponseEntity<Void> setDefaultMethod(@PathVariable Long userId, @PathVariable Long methodId) {
|
||||
|
||||
payoutMethodService.setDefaultMethod(userId, methodId);
|
||||
return ResponseEntity.ok().build();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user