فهرست منبع

feat: refactor ClassPackageUnit routes and service methods for active unit handling; add franchisee package routes

ebagabee 1 هفته پیش
والد
کامیت
1f97081a20

+ 14 - 4
app/Http/Controllers/ClassPackageUnitController.php

@@ -40,6 +40,8 @@ public function byUnit(): JsonResponse
     public function store(ClassPackageUnitRequest $request): JsonResponse
     public function store(ClassPackageUnitRequest $request): JsonResponse
     {
     {
         $unitId = $this->activeUnitId();
         $unitId = $this->activeUnitId();
+        abort_unless($unitId, 403, 'Nenhuma unidade ativa foi selecionada.');
+
         $data   = array_merge($request->validated(), ['unit_id' => $unitId]);
         $data   = array_merge($request->validated(), ['unit_id' => $unitId]);
         $item   = $this->service->create($data);
         $item   = $this->service->create($data);
         return $this->successResponse(payload: new ClassPackageUnitResource($item), message: __('messages.created'), code: 201);
         return $this->successResponse(payload: new ClassPackageUnitResource($item), message: __('messages.created'), code: 201);
@@ -47,25 +49,33 @@ public function store(ClassPackageUnitRequest $request): JsonResponse
 
 
     public function show(int $id): JsonResponse
     public function show(int $id): JsonResponse
     {
     {
-        $item = $this->service->findById($id);
+        $item = $this->service->findByIdForUnit($id, $this->requiredActiveUnitId());
         return $this->successResponse(payload: new ClassPackageUnitResource($item));
         return $this->successResponse(payload: new ClassPackageUnitResource($item));
     }
     }
 
 
     public function update(ClassPackageUnitRequest $request, int $id): JsonResponse
     public function update(ClassPackageUnitRequest $request, int $id): JsonResponse
     {
     {
-        $item = $this->service->update($id, $request->validated());
+        $item = $this->service->update($id, $this->requiredActiveUnitId(), $request->validated());
         return $this->successResponse(payload: new ClassPackageUnitResource($item), message: __('messages.updated'));
         return $this->successResponse(payload: new ClassPackageUnitResource($item), message: __('messages.updated'));
     }
     }
 
 
     public function toggleVisibility(int $id): JsonResponse
     public function toggleVisibility(int $id): JsonResponse
     {
     {
-        $item = $this->service->toggleVisibility($id);
+        $item = $this->service->toggleVisibility($id, $this->requiredActiveUnitId());
         return $this->successResponse(payload: new ClassPackageUnitResource($item), message: __('messages.updated'));
         return $this->successResponse(payload: new ClassPackageUnitResource($item), message: __('messages.updated'));
     }
     }
 
 
     public function destroy(int $id): JsonResponse
     public function destroy(int $id): JsonResponse
     {
     {
-        $this->service->delete($id);
+        $this->service->delete($id, $this->requiredActiveUnitId());
         return $this->successResponse(message: __('messages.deleted'), code: 204);
         return $this->successResponse(message: __('messages.deleted'), code: 204);
     }
     }
+
+    private function requiredActiveUnitId(): int
+    {
+        $unitId = $this->activeUnitId();
+        abort_unless($unitId, 403, 'Nenhuma unidade ativa foi selecionada.');
+
+        return $unitId;
+    }
 }
 }

+ 10 - 11
app/Services/ClassPackageUnitService.php

@@ -25,9 +25,11 @@ public function getAllByUnit(int $unitId): Collection
             ->get();
             ->get();
     }
     }
 
 
-    public function findById(int $id): ?ClassPackageUnit
+    public function findByIdForUnit(int $id, int $unitId): ClassPackageUnit
     {
     {
-        return ClassPackageUnit::with('products.product')->find($id);
+        return ClassPackageUnit::with('products.product')
+            ->where('unit_id', $unitId)
+            ->findOrFail($id);
     }
     }
 
 
     public function create(array $data): ClassPackageUnit
     public function create(array $data): ClassPackageUnit
@@ -44,10 +46,9 @@ public function create(array $data): ClassPackageUnit
         return $packageUnit->load('products.product');
         return $packageUnit->load('products.product');
     }
     }
 
 
-    public function update(int $id, array $data): ?ClassPackageUnit
+    public function update(int $id, int $unitId, array $data): ClassPackageUnit
     {
     {
-        $packageUnit = $this->findById($id);
-        if (!$packageUnit) return null;
+        $packageUnit = $this->findByIdForUnit($id, $unitId);
 
 
         $materials = $data['materials'] ?? null;
         $materials = $data['materials'] ?? null;
         unset($data['materials']);
         unset($data['materials']);
@@ -65,20 +66,18 @@ public function update(int $id, array $data): ?ClassPackageUnit
         return $packageUnit->fresh('products.product');
         return $packageUnit->fresh('products.product');
     }
     }
 
 
-    public function toggleVisibility(int $id): ?ClassPackageUnit
+    public function toggleVisibility(int $id, int $unitId): ClassPackageUnit
     {
     {
-        $packageUnit = ClassPackageUnit::find($id);
-        if (!$packageUnit) return null;
+        $packageUnit = $this->findByIdForUnit($id, $unitId);
 
 
         $packageUnit->update(['visible' => !$packageUnit->visible]);
         $packageUnit->update(['visible' => !$packageUnit->visible]);
 
 
         return $packageUnit->fresh();
         return $packageUnit->fresh();
     }
     }
 
 
-    public function delete(int $id): bool
+    public function delete(int $id, int $unitId): bool
     {
     {
-        $packageUnit = ClassPackageUnit::find($id);
-        if (!$packageUnit) return false;
+        $packageUnit = $this->findByIdForUnit($id, $unitId);
 
 
         return $packageUnit->delete();
         return $packageUnit->delete();
     }
     }

+ 0 - 14
routes/authRoutes/class_package_unit.php

@@ -1,14 +0,0 @@
-<?php
-
-use Illuminate\Support\Facades\Route;
-use App\Http\Controllers\ClassPackageUnitController;
-
-Route::controller(ClassPackageUnitController::class)->prefix('class-package-unit')->group(function () {
-    Route::get('/', 'index')->middleware('permission:class-package-unit,view');
-    Route::get('/visible', 'byUnit')->middleware('permission:franchisee_packages,view');
-    Route::post('/', 'store')->middleware('permission:class-package-unit,add');
-    Route::get('/{id}', 'show')->middleware('permission:class-package-unit,view');
-    Route::put('/{id}', 'update')->middleware('permission:class-package-unit,edit');
-    Route::patch('/{id}/toggle-visibility', 'toggleVisibility')->middleware('permission:class-package-unit,edit');
-    Route::delete('/{id}', 'destroy')->middleware('permission:class-package-unit,delete');
-});

+ 24 - 0
routes/authRoutes/franchisee_packages.php

@@ -0,0 +1,24 @@
+<?php
+
+use App\Http\Controllers\ClassPackageUnitController;
+use App\Http\Controllers\ProductController;
+use Illuminate\Support\Facades\Route;
+
+Route::prefix('franchisee/packages')->group(function () {
+    Route::get('/', [ClassPackageUnitController::class, 'index'])
+        ->middleware('permission:franchisee_packages,view');
+    Route::post('/', [ClassPackageUnitController::class, 'store'])
+        ->middleware('permission:franchisee_packages,add');
+
+    Route::get('/material-options', [ProductController::class, 'select'])
+        ->middleware('permission:franchisee_packages,view');
+
+    Route::get('/{id}', [ClassPackageUnitController::class, 'show'])
+        ->whereNumber('id')->middleware('permission:franchisee_packages,view');
+    Route::put('/{id}', [ClassPackageUnitController::class, 'update'])
+        ->whereNumber('id')->middleware('permission:franchisee_packages,edit');
+    Route::patch('/{id}/visibility', [ClassPackageUnitController::class, 'toggleVisibility'])
+        ->whereNumber('id')->middleware('permission:franchisee_packages,edit');
+    Route::delete('/{id}', [ClassPackageUnitController::class, 'destroy'])
+        ->whereNumber('id')->middleware('permission:franchisee_packages,delete');
+});