ProviderWithdrawalController.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Resources\PaymentSplitResource;
  4. use App\Http\Resources\ProviderWithdrawalResource;
  5. use App\Services\ProviderWithdrawalService;
  6. use Illuminate\Http\JsonResponse;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Auth;
  9. class ProviderWithdrawalController extends Controller
  10. {
  11. public function __construct(
  12. private readonly ProviderWithdrawalService $service,
  13. ) {}
  14. public function index(): JsonResponse
  15. {
  16. $provider = $this->resolveProvider();
  17. $items = $this->service->getWithdrawals($provider);
  18. return $this->successResponse(payload: ProviderWithdrawalResource::collection($items));
  19. }
  20. public function all(): JsonResponse
  21. {
  22. $items = $this->service->getAllWithdrawals();
  23. return $this->successResponse(payload: ProviderWithdrawalResource::collection($items));
  24. }
  25. public function store(Request $request): JsonResponse
  26. {
  27. $provider = $this->resolveProvider();
  28. $withdrawal = $this->service->requestWithdrawal($provider);
  29. return $this->successResponse(
  30. payload: new ProviderWithdrawalResource($withdrawal),
  31. message: __('messages.withdrawal_requested'),
  32. code: 201,
  33. );
  34. }
  35. public function show(int $id): JsonResponse
  36. {
  37. $provider = $this->resolveProvider();
  38. $withdrawal = $this->service->getWithdrawal($id, $provider);
  39. return $this->successResponse(payload: new ProviderWithdrawalResource($withdrawal));
  40. }
  41. //
  42. public function balance(): JsonResponse
  43. {
  44. $provider = $this->resolveProvider();
  45. return $this->successResponse(payload: [
  46. 'available' => $this->service->getAvailableBalance($provider),
  47. 'pending' => $this->service->getPendingBalance($provider),
  48. ]);
  49. }
  50. public function configuration(): JsonResponse
  51. {
  52. return $this->successResponse(payload: [
  53. 'pix_enabled' => config('withdrawals.pix_enabled'),
  54. ]);
  55. }
  56. public function fees(): JsonResponse
  57. {
  58. return $this->successResponse(payload: $this->service->getWithdrawalFees());
  59. }
  60. public function splits(): JsonResponse
  61. {
  62. $provider = $this->resolveProvider();
  63. $splits = $this->service->getPaymentSplits($provider);
  64. return $this->successResponse(payload: PaymentSplitResource::collection($splits));
  65. }
  66. //
  67. private function resolveProvider()
  68. {
  69. $provider = Auth::user()->provider;
  70. if (! $provider) {
  71. abort(403, 'Apenas prestadores podem acessar este recurso.');
  72. }
  73. return $provider;
  74. }
  75. }