Bläddra i källkod

feat: add update and delete routes for treasury launches with appropriate permissions

ebagabee 1 vecka sedan
förälder
incheckning
b70e514fb6

+ 46 - 6
app/Http/Controllers/TreasuryLaunchController.php

@@ -3,10 +3,10 @@
 namespace App\Http\Controllers;
 
 use App\Http\Controllers\Concerns\ResolvesActiveUnit;
-use App\Services\TreasuryAccountService;
-use App\Services\TreasuryLaunchService;
 use App\Http\Requests\TreasuryLaunchRequest;
 use App\Http\Resources\TreasuryLaunchResource;
+use App\Services\TreasuryAccountService;
+use App\Services\TreasuryLaunchService;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 
@@ -24,14 +24,14 @@ public function __construct(
     public function indexMe(Request $request): JsonResponse
     {
         $unitId = $this->activeUnitId();
-        if (!$unitId) {
+        if (! $unitId) {
             return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
         }
 
         $accountId = $request->filled('account_id') ? (int) $request->input('account_id') : null;
 
         // Extrato só de uma conta da própria unidade.
-        if ($accountId !== null && !$this->accountService->findByIdForUnit($accountId, $unitId)) {
+        if ($accountId !== null && ! $this->accountService->findByIdForUnit($accountId, $unitId)) {
             return $this->errorResponse(message: 'Conta não encontrada', code: 404);
         }
 
@@ -43,14 +43,14 @@ public function indexMe(Request $request): JsonResponse
     public function storeMe(TreasuryLaunchRequest $request): JsonResponse
     {
         $unitId = $this->activeUnitId();
-        if (!$unitId) {
+        if (! $unitId) {
             return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
         }
 
         $data = $request->validated();
 
         // A conta movimentada precisa pertencer à unidade ativa.
-        if (!$this->accountService->findByIdForUnit((int) $data['account_id'], $unitId)) {
+        if (! $this->accountService->findByIdForUnit((int) $data['account_id'], $unitId)) {
             return $this->errorResponse(message: 'Conta não encontrada', code: 404);
         }
 
@@ -59,34 +59,74 @@ public function storeMe(TreasuryLaunchRequest $request): JsonResponse
         return $this->successResponse(payload: new TreasuryLaunchResource($item), message: __('messages.created'), code: 201);
     }
 
+    public function updateMe(TreasuryLaunchRequest $request, int $id): JsonResponse
+    {
+        $unitId = $this->activeUnitId();
+        $item = $this->service->findById($id);
+        $currentAccountId = $item?->transaction_type === 'entrada'
+            ? $item?->to_account_id
+            : $item?->from_account_id;
+        $accountId = $request->integer('account_id') ?: $currentAccountId;
+
+        if (! $unitId || ! $item || ! $currentAccountId
+            || ! $this->accountService->findByIdForUnit($currentAccountId, $unitId)
+            || ! $accountId || ! $this->accountService->findByIdForUnit($accountId, $unitId)) {
+            return $this->errorResponse(message: 'Movimentação não encontrada', code: 404);
+        }
+
+        $updated = $this->service->update($id, $request->validated());
+
+        return $this->successResponse(payload: new TreasuryLaunchResource($updated), message: __('messages.updated'));
+    }
+
+    public function destroyMe(int $id): JsonResponse
+    {
+        $unitId = $this->activeUnitId();
+        $item = $this->service->findById($id);
+        $accountId = $item?->transaction_type === 'entrada' ? $item?->to_account_id : $item?->from_account_id;
+
+        if (! $unitId || ! $item || ! $accountId || ! $this->accountService->findByIdForUnit($accountId, $unitId)) {
+            return $this->errorResponse(message: 'Movimentação não encontrada', code: 404);
+        }
+
+        $this->service->delete($id);
+
+        return $this->successResponse(message: __('messages.deleted'), code: 204);
+    }
+
     public function index(Request $request): JsonResponse
     {
         $accountId = $request->filled('account_id') ? (int) $request->input('account_id') : null;
         $items = $this->service->getAll($accountId);
+
         return $this->successResponse(payload: TreasuryLaunchResource::collection($items));
     }
 
     public function store(TreasuryLaunchRequest $request): JsonResponse
     {
         $item = $this->service->create($request->validated());
+
         return $this->successResponse(payload: new TreasuryLaunchResource($item), message: __('messages.created'), code: 201);
     }
 
     public function show(int $id): JsonResponse
     {
         $item = $this->service->findById($id);
+
         return $this->successResponse(payload: new TreasuryLaunchResource($item));
     }
 
     public function update(TreasuryLaunchRequest $request, int $id): JsonResponse
     {
         $item = $this->service->update($id, $request->validated());
+
         return $this->successResponse(payload: new TreasuryLaunchResource($item), message: __('messages.updated'));
     }
 
     public function destroy(int $id): JsonResponse
     {
         $this->service->delete($id);
+
         return $this->successResponse(message: __('messages.deleted'), code: 204);
     }
 }

+ 4 - 0
routes/authRoutes/franchisee_financial.php

@@ -54,6 +54,10 @@
         ->middleware('permission:franchisee_financial,view');
     Route::post('/treasury/launches', [TreasuryLaunchController::class, 'storeMe'])
         ->middleware('permission:franchisee_financial,add');
+    Route::put('/treasury/launches/{id}', [TreasuryLaunchController::class, 'updateMe'])
+        ->whereNumber('id')->middleware('permission:franchisee_financial,edit');
+    Route::delete('/treasury/launches/{id}', [TreasuryLaunchController::class, 'destroyMe'])
+        ->whereNumber('id')->middleware('permission:franchisee_financial,delete');
 
     Route::get('/plan-accounts', [FinancialPlanAccountController::class, 'indexMe'])
         ->middleware('permission:franchisee_financial,view');

+ 2 - 2
routes/authRoutes/franchisee_integrations.php

@@ -4,6 +4,6 @@
 use Illuminate\Support\Facades\Route;
 
 Route::prefix('franchisee/integrations')->group(function () {
-    Route::get('/asaas', [UnitPaymentAccountController::class, 'showMe'])->middleware('permission:franchisee_integrations,view');
-    Route::post('/asaas', [UnitPaymentAccountController::class, 'upsertMe'])->middleware('permission:franchisee_integrations,edit');
+    Route::get('/asaas', [UnitPaymentAccountController::class, 'showMe'])->middleware('permission:franchisee_financial,view');
+    Route::post('/asaas', [UnitPaymentAccountController::class, 'upsertMe'])->middleware('permission:franchisee_financial,edit');
 });