Browse Source

feat: add endpoints necessarios para alimentar o rontend do franqueado

Gustavo Mantovani 1 tháng trước cách đây
mục cha
commit
44c49dfe7e

+ 40 - 0
app/Http/Controllers/FranchiseeContractController.php

@@ -8,6 +8,7 @@
 use App\Http\Resources\FranchiseeContractTaxHistoryResource;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 
 class FranchiseeContractController extends Controller
 {
@@ -59,4 +60,43 @@ public function taxHistory(int $id): JsonResponse
         $items = $this->service->getTaxHistory($id);
         return $this->successResponse(payload: FranchiseeContractTaxHistoryResource::collection($items));
     }
+
+    //
+
+    public function indexMe(): JsonResponse
+    {
+        $unitId = $this->currentUnitId();
+
+        if (!$unitId) {
+            return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
+        }
+
+        $items = $this->service->getByUnitId($unitId);
+
+        return $this->successResponse(payload: FranchiseeContractResource::collection($items));
+    }
+
+    public function taxHistoryMe(int $id): JsonResponse
+    {
+        $unitId = $this->currentUnitId();
+
+        $contract = $this->service->findById($id);
+
+        if (!$unitId || !$contract || (int) $contract->unit_id !== $unitId) {
+            return $this->errorResponse(message: 'Contrato não encontrado', code: 404);
+        }
+
+        $items = $this->service->getTaxHistory($id);
+
+        return $this->successResponse(payload: FranchiseeContractTaxHistoryResource::collection($items));
+    }
+
+    //
+
+    private function currentUnitId(): ?int
+    {
+        $user = Auth::user()?->load('units');
+
+        return $user?->units->first()?->id;
+    }
 }

+ 3 - 2
app/Http/Controllers/UnitController.php

@@ -2,9 +2,9 @@
 
 namespace App\Http\Controllers;
 
+use App\Services\UnitService;
 use App\Http\Requests\UnitRequest;
 use App\Http\Resources\UnitResource;
-use App\Services\UnitService;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Support\Facades\Auth;
 
@@ -71,7 +71,7 @@ public function updateMe(UnitRequest $request): JsonResponse
             return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
         }
 
-        $item = $this->service->update($unit->id, $request->validated());
+        $item = $this->service->update($unit->id, $request->safe()->only(['avatar']));
 
         return $this->successResponse(payload: new UnitResource($item), message: __('messages.updated'));
     }
@@ -81,6 +81,7 @@ public function updateMe(UnitRequest $request): JsonResponse
     public function selectList(): JsonResponse
     {
         $items = $this->service->getSelectList();
+
         return $this->successResponse(payload: $items);
     }
 }

+ 18 - 0
app/Http/Controllers/UnitFinancialController.php

@@ -7,6 +7,7 @@
 use App\Http\Resources\UnitFinancialResource;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 
 class UnitFinancialController extends Controller
 {
@@ -20,13 +21,30 @@ public function show(Request $request): JsonResponse
         return $this->successResponse(payload: $item ? new UnitFinancialResource($item) : null);
     }
 
+    //
+
+    public function showMe(): JsonResponse
+    {
+        $unitId = Auth::user()?->load('units')->units->first()?->id;
+
+        if (!$unitId) {
+            return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
+        }
+
+        $item = $this->service->getByUnitId($unitId);
+
+        return $this->successResponse(payload: $item ? new UnitFinancialResource($item) : null);
+    }
+
     public function upsert(UnitFinancialRequest $request): JsonResponse
     {
         $validated = $request->validated();
         $unitId    = $validated['unit_id'];
+
         unset($validated['unit_id']);
 
         $item = $this->service->upsert($unitId, $validated);
+
         return $this->successResponse(payload: new UnitFinancialResource($item), message: __('messages.updated'));
     }
 }

+ 25 - 0
app/Http/Controllers/UnitHistoryController.php

@@ -7,6 +7,7 @@
 use App\Http\Resources\UnitHistoryResource;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 
 class UnitHistoryController extends Controller
 {
@@ -43,4 +44,28 @@ public function destroy(int $id): JsonResponse
         $this->service->delete($id);
         return $this->successResponse(message: __('messages.deleted'), code: 204);
     }
+
+    //
+
+    public function indexMe(): JsonResponse
+    {
+        $unitId = $this->currentUnitId();
+
+        if (!$unitId) {
+            return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
+        }
+
+        $items = $this->service->getVisibleByUnitId($unitId);
+
+        return $this->successResponse(payload: UnitHistoryResource::collection($items));
+    }
+
+    //
+
+    private function currentUnitId(): ?int
+    {
+        $user = Auth::user()?->load('units');
+
+        return $user?->units->first()?->id;
+    }
 }

+ 44 - 0
app/Http/Controllers/UnitMediaController.php

@@ -7,6 +7,7 @@
 use App\Http\Resources\UnitMediaResource;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 
 class UnitMediaController extends Controller
 {
@@ -43,4 +44,47 @@ public function destroy(int $id): JsonResponse
         $this->service->delete($id);
         return $this->successResponse(message: __('messages.deleted'), code: 204);
     }
+
+    //
+
+    public function indexMe(): JsonResponse
+    {
+        $unitId = $this->currentUnitId();
+
+        if (!$unitId) {
+            return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
+        }
+
+        $items = $this->service->getVisibleByUnitId($unitId);
+
+        return $this->successResponse(payload: UnitMediaResource::collection($items));
+    }
+
+    public function storeMe(UnitMediaRequest $request): JsonResponse
+    {
+        $unitId = $this->currentUnitId();
+
+        if (!$unitId) {
+            return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
+        }
+
+        $data = $request->validated();
+
+        $data['unit_id'] = $unitId;
+
+        $data['visible_to_franchisee'] = true;
+
+        $item = $this->service->create($data);
+
+        return $this->successResponse(payload: new UnitMediaResource($item), message: __('messages.created'), code: 201);
+    }
+
+    //
+
+    private function currentUnitId(): ?int
+    {
+        $user = Auth::user()?->load('units');
+
+        return $user?->units->first()?->id;
+    }
 }

+ 76 - 0
app/Http/Controllers/UnitPartnerController.php

@@ -7,6 +7,7 @@
 use App\Http\Resources\UnitPartnerResource;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 
 class UnitPartnerController extends Controller
 {
@@ -48,4 +49,79 @@ public function destroy(int $id): JsonResponse
         $this->service->delete($id);
         return $this->successResponse(message: __('messages.deleted'), code: 204);
     }
+
+    //
+
+    public function indexMe(): JsonResponse
+    {
+        $unitId = $this->currentUnitId();
+
+        if (!$unitId) {
+            return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
+        }
+
+        $items = $this->service->getByUnitId($unitId);
+
+        return $this->successResponse(payload: UnitPartnerResource::collection($items));
+    }
+
+    public function storeMe(UnitPartnerRequest $request): JsonResponse
+    {
+        $unitId = $this->currentUnitId();
+
+        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 UnitPartnerResource($item), message: __('messages.created'), code: 201);
+    }
+
+    public function updateMe(UnitPartnerRequest $request, int $id): JsonResponse
+    {
+        $unitId = $this->currentUnitId();
+
+        $item = $this->service->findById($id);
+
+        if (!$unitId || !$item || (int) $item->unit_id !== $unitId) {
+            return $this->errorResponse(message: 'Sócio não encontrado', code: 404);
+        }
+
+        $data = $request->validated();
+
+        $data['unit_id'] = $unitId;
+
+        $item = $this->service->update($id, $data);
+
+        return $this->successResponse(payload: new UnitPartnerResource($item), message: __('messages.updated'));
+    }
+
+    public function destroyMe(int $id): JsonResponse
+    {
+        $unitId = $this->currentUnitId();
+
+        $item = $this->service->findById($id);
+
+        if (!$unitId || !$item || (int) $item->unit_id !== $unitId) {
+            return $this->errorResponse(message: 'Sócio não encontrado', code: 404);
+        }
+
+        $this->service->delete($id);
+
+        return $this->successResponse(message: __('messages.deleted'), code: 204);
+    }
+
+    //
+
+    private function currentUnitId(): ?int
+    {
+        $user = Auth::user()?->load('units');
+
+        return $user?->units->first()?->id;
+    }
 }

+ 22 - 4
app/Http/Controllers/UserController.php

@@ -2,11 +2,12 @@
 
 namespace App\Http\Controllers;
 
-use App\Http\Resources\UserTypeResource;
 use App\Services\UserService;
 use App\Http\Requests\UserRequest;
 use App\Http\Resources\UserResource;
+use App\Http\Resources\UserTypeResource;
 use Illuminate\Http\JsonResponse;
+use Illuminate\Support\Facades\Auth;
 
 class UserController extends Controller
 {
@@ -21,6 +22,7 @@ public function authUser(): JsonResponse
     public function index(): JsonResponse
     {
         $items = $this->service->getAll();
+
         return $this->successResponse(
             payload: UserResource::collection($items),
         );
@@ -29,10 +31,11 @@ public function index(): JsonResponse
     public function store(UserRequest $request): JsonResponse
     {
         $item = $this->service->create($request->validated());
+
         return $this->successResponse(
             payload: new UserResource($item),
             message: __("messages.created"),
-            code: 201,
+            code:    201,
         );
     }
 
@@ -54,17 +57,32 @@ public function update(UserRequest $request, int $id): JsonResponse
     public function destroy(int $id): JsonResponse
     {
         $this->service->delete($id);
+
         return $this->successResponse(
-            message: __("messages.deleted"),
-            code: 204,
+            message: __("messages.deleted"), code: 204,
         );
     }
 
     public function getUserTypes(): JsonResponse
     {
         $user_types = $this->service->getUserTypes();
+
         return $this->successResponse(
             payload: new UserTypeResource($user_types),
         );
     }
+
+    //
+
+    public function updateMe(UserRequest $request): JsonResponse
+    {
+        $user = Auth::user();
+
+        $user->update($request->safe()->only(['password']));
+
+        return $this->successResponse(
+            payload: new UserResource($user->fresh(['state', 'units'])),
+            message: __("messages.updated"),
+        );
+    }
 }

+ 17 - 7
app/Services/UnitHistoryService.php

@@ -7,13 +7,6 @@
 
 class UnitHistoryService
 {
-    public function getByUnitId(int $unitId): Collection
-    {
-        return UnitHistory::where('unit_id', $unitId)
-            ->orderBy('created_at', 'desc')
-            ->get();
-    }
-
     public function findById(int $id): ?UnitHistory
     {
         return UnitHistory::find($id);
@@ -46,4 +39,21 @@ public function delete(int $id): bool
 
         return $model->delete();
     }
+
+    //
+
+    public function getByUnitId(int $unitId): Collection
+    {
+        return UnitHistory::where('unit_id', $unitId)
+            ->orderBy('created_at', 'desc')
+            ->get();
+    }
+
+    public function getVisibleByUnitId(int $unitId): Collection
+    {
+        return UnitHistory::where('unit_id', $unitId)
+            ->where('visible_to_franchisee', true)
+            ->orderBy('created_at', 'desc')
+            ->get();
+    }
 }

+ 10 - 0
app/Services/UnitMediaService.php

@@ -15,6 +15,16 @@ public function getByUnitId(int $unitId): Collection
             ->get();
     }
 
+    public function getVisibleByUnitId(int $unitId): Collection
+    {
+        return UnitMedia::where('unit_id', $unitId)
+            ->where('visible_to_franchisee', true)
+            ->orderBy('created_at', 'desc')
+            ->get();
+    }
+
+    //
+
     public function findById(int $id): ?UnitMedia
     {
         return UnitMedia::find($id);

+ 18 - 7
routes/authRoutes/franchisee_contract.php

@@ -4,17 +4,28 @@
 use App\Http\Controllers\FranchiseeContractController;
 
 Route::controller(FranchiseeContractController::class)->prefix('franchisee-contract')->group(function () {
-    Route::get('/active', 'active');
+    Route::get('/me', 'indexMe');
 
-    Route::get('/', 'index');
+    Route::get('/me/{id}/tax-history', 'taxHistoryMe');
 
-    Route::post('/', 'store');
+    Route::get('/active', 'active')
+        ->middleware('permission:unit,view');
 
-    Route::get('/{id}', 'show');
+    Route::get('/', 'index')
+        ->middleware('permission:unit,view');
 
-    Route::get('/{id}/tax-history', 'taxHistory');
+    Route::post('/', 'store')
+        ->middleware('permission:unit,add');
 
-    Route::put('/{id}', 'update');
+    Route::get('/{id}', 'show')
+        ->middleware('permission:unit,view');
 
-    Route::delete('/{id}', 'destroy');
+    Route::get('/{id}/tax-history', 'taxHistory')
+        ->middleware('permission:unit,view');
+
+    Route::put('/{id}', 'update')
+        ->middleware('permission:unit,edit');
+
+    Route::delete('/{id}', 'destroy')
+        ->middleware('permission:unit,delete');
 });

+ 1 - 0
routes/authRoutes/unit.php

@@ -10,6 +10,7 @@
 
     Route::get('/me', 'showMe');
     Route::post('/me', 'updateMe');
+    Route::put('/me', 'updateMe');
 
     //
 

+ 7 - 2
routes/authRoutes/unit_financial.php

@@ -4,6 +4,11 @@
 use App\Http\Controllers\UnitFinancialController;
 
 Route::controller(UnitFinancialController::class)->prefix('unit-financial')->group(function () {
-    Route::get('/', 'show')->middleware('permission:unit,view');
-    Route::post('/', 'upsert')->middleware('permission:unit,edit');
+    Route::get('/me', 'showMe');
+
+    Route::get('/', 'show')
+        ->middleware('permission:unit,view');
+
+    Route::post('/', 'upsert')
+        ->middleware('permission:unit,edit');
 });

+ 16 - 5
routes/authRoutes/unit_history.php

@@ -4,9 +4,20 @@
 use App\Http\Controllers\UnitHistoryController;
 
 Route::controller(UnitHistoryController::class)->prefix('unit-history')->group(function () {
-    Route::get('/', 'index')->middleware('permission:unit,view');
-    Route::post('/', 'store')->middleware('permission:unit,add');
-    Route::get('/{id}', 'show')->middleware('permission:unit,view');
-    Route::put('/{id}', 'update')->middleware('permission:unit,edit');
-    Route::delete('/{id}', 'destroy')->middleware('permission:unit,delete');
+    Route::get('/me', 'indexMe');
+
+    Route::get('/', 'index')
+        ->middleware('permission:unit,view');
+
+    Route::post('/', 'store')
+        ->middleware('permission:unit,add');
+
+    Route::get('/{id}', 'show')
+        ->middleware('permission:unit,view');
+
+    Route::put('/{id}', 'update')
+        ->middleware('permission:unit,edit');
+
+    Route::delete('/{id}', 'destroy')
+        ->middleware('permission:unit,delete');
 });

+ 17 - 5
routes/authRoutes/unit_media.php

@@ -4,9 +4,21 @@
 use App\Http\Controllers\UnitMediaController;
 
 Route::controller(UnitMediaController::class)->prefix('unit-media')->group(function () {
-    Route::get('/', 'index')->middleware('permission:unit,view');
-    Route::post('/', 'store')->middleware('permission:unit,add');
-    Route::get('/{id}', 'show')->middleware('permission:unit,view');
-    Route::put('/{id}', 'update')->middleware('permission:unit,edit');
-    Route::delete('/{id}', 'destroy')->middleware('permission:unit,delete');
+    Route::get('/me', 'indexMe');
+    Route::post('/me', 'storeMe');
+
+    Route::get('/', 'index')
+        ->middleware('permission:unit,view');
+
+    Route::post('/', 'store')
+        ->middleware('permission:unit,add');
+
+    Route::get('/{id}', 'show')
+        ->middleware('permission:unit,view');
+
+    Route::put('/{id}', 'update')
+        ->middleware('permission:unit,edit');
+
+    Route::delete('/{id}', 'destroy')
+        ->middleware('permission:unit,delete');
 });

+ 15 - 5
routes/authRoutes/unit_partner.php

@@ -4,13 +4,23 @@
 use App\Http\Controllers\UnitPartnerController;
 
 Route::controller(UnitPartnerController::class)->prefix('unit-partner')->group(function () {
-    Route::get('/', 'index')->middleware('permission:unit,view');
+    Route::get('/me', 'indexMe');
+    Route::post('/me', 'storeMe');
+    Route::put('/me/{id}', 'updateMe');
+    Route::delete('/me/{id}', 'destroyMe');
 
-    Route::post('/', 'store')->middleware('permission:unit,add');
+    Route::get('/', 'index')
+        ->middleware('permission:unit,view');
 
-    Route::get('/{id}', 'show')->middleware('permission:unit,view');
+    Route::post('/', 'store')
+        ->middleware('permission:unit,add');
 
-    Route::put('/{id}', 'update')->middleware('permission:unit,edit');
+    Route::get('/{id}', 'show')
+        ->middleware('permission:unit,view');
 
-    Route::delete('/{id}', 'destroy')->middleware('permission:unit,delete');
+    Route::put('/{id}', 'update')
+        ->middleware('permission:unit,edit');
+
+    Route::delete('/{id}', 'destroy')
+        ->middleware('permission:unit,delete');
 });

+ 14 - 6
routes/authRoutes/user.php

@@ -6,15 +6,23 @@
 Route::controller(UserController::class)->prefix('user')->group(function () {
     Route::get('/current/auth', 'authUser');
 
-    Route::get('/', 'index')->middleware('permission:config.user,view');
+    Route::put('/me', 'updateMe');
 
-    Route::post('/', 'store')->middleware('permission:config.user,add');
+    Route::get('/', 'index')
+        ->middleware('permission:config.user,view');
 
-    Route::get('/{id}', 'show')->middleware('permission:config.user,view');
+    Route::post('/', 'store')
+        ->middleware('permission:config.user,add');
 
-    Route::put('/{id}', 'update')->middleware('permission:config.user,edit');
+    Route::get('/{id}', 'show')
+        ->middleware('permission:config.user,view');
 
-    Route::delete('/{id}', 'destroy')->middleware('permission:config.user,delete');
+    Route::put('/{id}', 'update')
+        ->middleware('permission:config.user,edit');
 
-    Route::get('/all/types', 'getUserTypes')->middleware('permission:config.user,view');
+    Route::delete('/{id}', 'destroy')
+        ->middleware('permission:config.user,delete');
+
+    Route::get('/all/types', 'getUserTypes')
+        ->middleware('permission:config.user,view');
 });