Переглянути джерело

feat(treasury-account): endpoints /me com escopo pela unidade e saldo por conta

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ebagabee 4 тижнів тому
батько
коміт
5703d50e05

+ 59 - 0
app/Http/Controllers/TreasuryAccountController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers;
 
+use App\Http\Controllers\Concerns\ResolvesActiveUnit;
 use App\Services\TreasuryAccountService;
 use App\Http\Requests\TreasuryAccountRequest;
 use App\Http\Resources\TreasuryAccountResource;
@@ -10,10 +11,68 @@
 
 class TreasuryAccountController extends Controller
 {
+    use ResolvesActiveUnit;
+
     public function __construct(
         protected TreasuryAccountService $service,
     ) {}
 
+    // --- Unidade ativa (Franchisee) ---
+
+    public function indexMe(): JsonResponse
+    {
+        $unitId = $this->activeUnitId();
+        if (!$unitId) {
+            return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
+        }
+
+        return $this->successResponse(
+            payload: TreasuryAccountResource::collection($this->service->getAll($unitId)),
+        );
+    }
+
+    public function storeMe(TreasuryAccountRequest $request): JsonResponse
+    {
+        $unitId = $this->activeUnitId();
+        if (!$unitId) {
+            return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
+        }
+
+        $data = $request->validated();
+        $data['unit_id'] = $unitId;
+
+        $item = $this->service->create($data);
+
+        return $this->successResponse(payload: new TreasuryAccountResource($item), message: __('messages.created'), code: 201);
+    }
+
+    public function updateMe(TreasuryAccountRequest $request, int $id): JsonResponse
+    {
+        $unitId = $this->activeUnitId();
+        if (!$unitId || !$this->service->findByIdForUnit($id, $unitId)) {
+            return $this->errorResponse(message: 'Conta não encontrada', code: 404);
+        }
+
+        $data = $request->validated();
+        unset($data['unit_id']);
+
+        $item = $this->service->update($id, $data);
+
+        return $this->successResponse(payload: new TreasuryAccountResource($item), message: __('messages.updated'));
+    }
+
+    public function destroyMe(int $id): JsonResponse
+    {
+        $unitId = $this->activeUnitId();
+        if (!$unitId || !$this->service->findByIdForUnit($id, $unitId)) {
+            return $this->errorResponse(message: 'Conta não encontrada', code: 404);
+        }
+
+        $this->service->delete($id);
+
+        return $this->successResponse(message: __('messages.deleted'), code: 204);
+    }
+
     public function index(Request $request): JsonResponse
     {
         $unitId = $request->filled('unit_id') ? (int) $request->input('unit_id') : null;

+ 5 - 0
app/Services/TreasuryAccountService.php

@@ -85,6 +85,11 @@ public function findById(int $id): ?TreasuryAccount
         return TreasuryAccount::find($id);
     }
 
+    public function findByIdForUnit(int $id, int $unitId): ?TreasuryAccount
+    {
+        return TreasuryAccount::where('id', $id)->where('unit_id', $unitId)->first();
+    }
+
     public function create(array $data): TreasuryAccount
     {
         // Sem unit_id => conta da rede (franqueador). Com unit_id => conta da unidade (franchisee).

+ 5 - 0
routes/authRoutes/treasury_account.php

@@ -4,6 +4,11 @@
 use App\Http\Controllers\TreasuryAccountController;
 
 Route::controller(TreasuryAccountController::class)->prefix('treasury-account')->group(function () {
+    Route::get('/me', 'indexMe');
+    Route::post('/me', 'storeMe');
+    Route::put('/me/{id}', 'updateMe');
+    Route::delete('/me/{id}', 'destroyMe');
+
     Route::get('/', 'index')->middleware('permission:treasury-account,view');
 
     Route::post('/', 'store')->middleware('permission:treasury-account,add');