Преглед на файлове

feat: :sparkles: adicionar aprovacao de usuario, position_id e sector_id

joykepler преди 6 дни
родител
ревизия
0fab913066
променени са 3 файла, в които са добавени 37 реда и са изтрити 1 реда
  1. 15 1
      app/Http/Controllers/UserController.php
  2. 20 0
      app/Services/UserService.php
  3. 2 0
      routes/authRoutes/user.php

+ 15 - 1
app/Http/Controllers/UserController.php

@@ -68,7 +68,7 @@ class UserController extends Controller
 
     public function indexPaginated(Request $request): JsonResponse
     {
-        $filters = $request->only(['type', 'status', 'search']);
+        $filters = $request->only(['type', 'status', 'search', 'position_id', 'sector_id']);
         $perPage = min((int) $request->get('per_page', 10), 100);
         $paginator = $this->service->getAllPaginated($filters, $perPage);
 
@@ -144,4 +144,18 @@ class UserController extends Controller
             message: __("messages.updated"),
         );
     }
+
+    public function approve(int $id): JsonResponse
+    {
+        $item = $this->service->approve($id);
+
+        if (!$item) {
+            return $this->errorResponse(message: __('messages.not_found'), code: 404);
+        }
+
+        return $this->successResponse(
+            payload: new UserResource($item),
+            message: __("messages.updated"),
+        );
+    }
 }

+ 20 - 0
app/Services/UserService.php

@@ -34,6 +34,14 @@ class UserService
             $query->where('status', $filters['status']);
         }
 
+        if (!empty($filters['position_id'])) {
+            $query->where('position_id', $filters['position_id']);
+        }
+
+        if (!empty($filters['sector_id'])) {
+            $query->where('sector_id', $filters['sector_id']);
+        }
+
         if (!empty($filters['search'])) {
             $term = '%' . mb_strtolower($filters['search']) . '%';
             $query->where(function ($q) use ($term) {
@@ -106,6 +114,18 @@ class UserService
         return $model->fresh();
     }
 
+    public function approve(int $id): ?User
+    {
+        $model = $this->findById($id);
+        if (!$model) return null;
+
+        $model->update([
+            'status' => UserStatusEnum::ACTIVE,
+        ]);
+
+        return $model->fresh();
+    }
+
     public function getUserTypes(): array
     {
         return UserTypeEnum::toArray();

+ 2 - 0
routes/authRoutes/user.php

@@ -27,4 +27,6 @@ Route::controller(UserController::class)->prefix('user')->group(function () {
     Route::delete('/my/avatar', 'deleteAvatar');
 
     Route::put('/{id}/on-leave', 'setOnLeave')->middleware('permission:config.user,edit');
+
+    Route::put('/{id}/approve', 'approve')->middleware('permission:config.user,edit');
 });