ProviderWithdrawalController.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. private function resolveProvider()
  15. {
  16. $provider = Auth::user()->provider;
  17. if (! $provider) {
  18. abort(403, 'Apenas prestadores podem acessar este recurso.');
  19. }
  20. return $provider;
  21. }
  22. public function balance(): JsonResponse
  23. {
  24. $provider = $this->resolveProvider();
  25. return $this->successResponse(payload: [
  26. 'available' => $this->service->getAvailableBalance($provider),
  27. 'pending' => $this->service->getPendingBalance($provider),
  28. ]);
  29. }
  30. public function fees(): JsonResponse
  31. {
  32. return $this->successResponse(payload: $this->service->getWithdrawalFees());
  33. }
  34. public function splits(): JsonResponse
  35. {
  36. $provider = $this->resolveProvider();
  37. $splits = $this->service->getPaymentSplits($provider);
  38. return $this->successResponse(payload: PaymentSplitResource::collection($splits));
  39. }
  40. public function index(): JsonResponse
  41. {
  42. $provider = $this->resolveProvider();
  43. $items = $this->service->getWithdrawals($provider);
  44. return $this->successResponse(payload: ProviderWithdrawalResource::collection($items));
  45. }
  46. public function all(): JsonResponse
  47. {
  48. $items = $this->service->getAllWithdrawals();
  49. return $this->successResponse(payload: ProviderWithdrawalResource::collection($items));
  50. }
  51. public function store(Request $request): JsonResponse
  52. {
  53. $provider = $this->resolveProvider();
  54. $withdrawal = $this->service->requestWithdrawal($provider);
  55. return $this->successResponse(
  56. payload: new ProviderWithdrawalResource($withdrawal),
  57. message: 'Saque solicitado com sucesso.',
  58. code: 201,
  59. );
  60. }
  61. public function show(int $id): JsonResponse
  62. {
  63. $provider = $this->resolveProvider();
  64. $withdrawal = $this->service->getWithdrawal($id, $provider);
  65. return $this->successResponse(payload: new ProviderWithdrawalResource($withdrawal));
  66. }
  67. }