Browse Source

feat: add permissions e ajusta endpoints de pagamento para alimentar o backoffice

Gustavo Mantovani 2 tuần trước cách đây
mục cha
commit
bfd38ba11f

+ 7 - 0
app/Http/Controllers/ProviderWithdrawalController.php

@@ -54,6 +54,13 @@ class ProviderWithdrawalController extends Controller
         return $this->successResponse(payload: ProviderWithdrawalResource::collection($items));
     }
 
+    public function all(): JsonResponse
+    {
+        $items = $this->service->getAllWithdrawals();
+
+        return $this->successResponse(payload: ProviderWithdrawalResource::collection($items));
+    }
+
     public function store(Request $request): JsonResponse
     {
         $provider = $this->resolveProvider();

+ 2 - 0
app/Http/Resources/PaymentResource.php

@@ -21,6 +21,8 @@ class PaymentResource extends JsonResource
             'schedule_id'                 => $this->schedule_id,
             'client_id'                   => $this->client_id,
             'provider_id'                 => $this->provider_id,
+            'client_name'                 => $this->client?->user?->name,
+            'provider_name'               => $this->provider?->user?->name,
             'client_payment_method_id'    => $this->client_payment_method_id,
             'gateway_provider'            => $this->gateway_provider,
             'gateway_entity_reference'    => $this->gateway_entity_reference,

+ 2 - 0
app/Http/Resources/PaymentSplitResource.php

@@ -14,6 +14,8 @@ class PaymentSplitResource extends JsonResource
             'id'                                => $this->id,
             'payment_id'                        => $this->payment_id,
             'provider_id'                       => $this->provider_id,
+            'provider_name'                     => $this->provider?->user?->name,
+            'provider_withdrawal_id'            => $this->provider_withdrawal_id,
             'gateway_provider'                  => $this->gateway_provider,
             'gateway_transfer_target_reference' => $this->gateway_transfer_target_reference,
             'gateway_transfer_target_label'     => $this->gateway_transfer_target_label,

+ 2 - 0
app/Http/Resources/ProviderWithdrawalResource.php

@@ -13,6 +13,7 @@ class ProviderWithdrawalResource extends JsonResource
         return [
             'id'                 => $this->id,
             'provider_id'        => $this->provider_id,
+            'provider_name'      => $this->provider?->user?->name,
             'recipient_id'       => $this->recipient_id,
             'transfer_id'        => $this->transfer_id,
             'gross_amount'       => $this->gross_amount,
@@ -23,6 +24,7 @@ class ProviderWithdrawalResource extends JsonResource
             'bank_account'       => $this->bank_account,
             'completed_at'       => $this->completed_at?->toISOString(),
             'failed_at'          => $this->failed_at?->toISOString(),
+            'payment_split_ids'  => $this->whenLoaded('paymentSplits', fn () => $this->paymentSplits->pluck('id')->values()),
             'created_at'         => $this->created_at?->toISOString(),
         ];
     }

+ 4 - 1
app/Services/PaymentService.php

@@ -24,13 +24,16 @@ class PaymentService
     public function getAll(): Collection
     {
         return Payment::query()
+            ->with(['client.user', 'provider.user'])
             ->orderBy('created_at', 'desc')
             ->get();
     }
 
     public function findById(int $id): ?Payment
     {
-        return Payment::find($id);
+        return Payment::query()
+            ->with(['client.user', 'provider.user'])
+            ->find($id);
     }
 
     public function create(array $data): Payment

+ 4 - 1
app/Services/PaymentSplitService.php

@@ -10,13 +10,16 @@ class PaymentSplitService
     public function getAll(): Collection
     {
         return PaymentSplit::query()
+            ->with(['payment.schedule.client.user', 'provider.user', 'providerWithdrawal'])
             ->orderBy('created_at', 'desc')
             ->get();
     }
 
     public function findById(int $id): ?PaymentSplit
     {
-        return PaymentSplit::find($id);
+        return PaymentSplit::query()
+            ->with(['payment.schedule.client.user', 'provider.user', 'providerWithdrawal'])
+            ->find($id);
     }
 
     public function create(array $data): PaymentSplit

+ 8 - 0
app/Services/ProviderWithdrawalService.php

@@ -154,6 +154,14 @@ class ProviderWithdrawalService
             ->get();
     }
 
+    public function getAllWithdrawals(): Collection
+    {
+        return ProviderWithdrawal::query()
+            ->with(['provider.user', 'paymentSplits'])
+            ->orderBy('created_at', 'desc')
+            ->get();
+    }
+
     public function getWithdrawal(int $id, Provider $provider): ProviderWithdrawal
     {
         return ProviderWithdrawal::query()

+ 13 - 0
database/seeders/PermissionSeeder.php

@@ -35,6 +35,19 @@ class PermissionSeeder extends Seeder
                 'bits'        => 511,
                 'children'    => [],
             ],
+            [
+                'scope'       => 'payment',
+                'description' => 'Pagamentos',
+                'bits'        => 257,
+                'children'    => [
+                    [
+                        'scope'       => 'payment-split',
+                        'description' => 'Splits de Pagamento',
+                        'bits'        => 1,
+                        'children'    => [],
+                    ],
+                ],
+            ],
             [
                 'scope'       => 'config',
                 'description' => 'Configurações',

+ 2 - 0
database/seeders/UserTypePermissionSeeder.php

@@ -29,6 +29,8 @@ class UserTypePermissionSeeder extends Seeder
                 case UserTypeEnum::USER:
                     $userPermissions = [
                         ['scope' => 'dashboard', 'bits' => 1],
+                        ['scope' => 'payment', 'bits' => 257],
+                        ['scope' => 'payment-split', 'bits' => 1],
                         ['scope' => 'config.user', 'bits' => 5],
                         ['scope' => 'config.address', 'bits' => 271],
                         ['scope' => 'config.city', 'bits' => 1],

+ 1 - 0
routes/authRoutes/provider.php

@@ -8,6 +8,7 @@ Route::get('/provider/pending',            [ProviderController::class, 'pending'
 Route::patch('/provider/{id}/approve',            [ProviderController::class, 'approve'])->middleware('permission:config.provider,edit');
 Route::patch('/provider/{id}/reject',             [ProviderController::class, 'reject'])->middleware('permission:config.provider,edit');
 Route::get('/provider/payment-splits',            [ProviderWithdrawalController::class, 'splits'])->middleware('permission:config.provider,view');
+Route::get('/provider-withdrawals',               [ProviderWithdrawalController::class, 'all'])->middleware('permission:payment,view');
 Route::get('/provider/withdrawals/balance',       [ProviderWithdrawalController::class, 'balance'])->middleware('permission:config.provider,view');
 Route::get('/provider/withdrawals',               [ProviderWithdrawalController::class, 'index'])->middleware('permission:config.provider,view');
 Route::post('/provider/withdrawals',              [ProviderWithdrawalController::class, 'store'])->middleware('permission:config.provider,edit');