dev comment logic for check max users
Test Workflow / test (push) Successful in 4s

This commit is contained in:
vladp
2026-02-20 20:51:14 +07:00
parent 86e0e0619f
commit 5551d84bf7
30 changed files with 1167 additions and 3 deletions
@@ -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();
}
}