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

feat: add endpoints para o user ver e atualizar a propria unit a qual ele administra

Gustavo Mantovani 1 місяць тому
батько
коміт
bbef8be1b1

+ 36 - 1
app/Http/Controllers/UnitController.php

@@ -2,10 +2,11 @@
 
 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;
 
 class UnitController extends Controller
 {
@@ -43,6 +44,40 @@ public function destroy(int $id): JsonResponse
         return $this->successResponse(message: __('messages.deleted'), code: 204);
     }
 
+    //
+
+    public function showMe(): JsonResponse
+    {
+        $user = Auth::user()->load('units');
+
+        $unit = $user->units->first();
+
+        if (!$unit) {
+            return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
+        }
+
+        $item = $this->service->findById($unit->id);
+
+        return $this->successResponse(payload: new UnitResource($item));
+    }
+
+    public function updateMe(UnitRequest $request): JsonResponse
+    {
+        $user = Auth::user()->load('units');
+
+        $unit = $user->units->first();
+
+        if (!$unit) {
+            return $this->errorResponse(message: 'Unidade não encontrada', code: 404);
+        }
+
+        $item = $this->service->update($unit->id, $request->validated());
+
+        return $this->successResponse(payload: new UnitResource($item), message: __('messages.updated'));
+    }
+
+    //
+
     public function selectList(): JsonResponse
     {
         $items = $this->service->getSelectList();

+ 13 - 8
app/Services/AuthService.php

@@ -31,15 +31,17 @@ public function login(string $email, string $password, string $origem): ?array
 
         $user->update(['last_login_at' => now()]);
 
+        $user->load('units');
+
         $deviceId = Str::uuid()->toString();
 
-        $accessToken = $user->createAccessToken($deviceId);
+        $accessToken  = $user->createAccessToken($deviceId);
         $refreshToken = $user->createRefreshToken($deviceId);
 
         return [
             "payload" => [
                 "access_token" => $accessToken,
-                "user" => $user,
+                "user"         => $user,
             ],
             "refreshToken" => $refreshToken,
         ];
@@ -62,10 +64,13 @@ public function refresh(string $refreshToken): ?array
         }
 
         $user = $tokenModel->tokenable;
+
         if (!$user) {
             return null;
         }
 
+        $user->load('units');
+
         $deviceId = Str::afterLast($tokenModel->name, "_");
 
         $tokens = $this->refreshTokenTransaction($tokenModel, $user, $deviceId);
@@ -73,7 +78,7 @@ public function refresh(string $refreshToken): ?array
         return [
             "payload" => [
                 "access_token" => $tokens["access_token"],
-                "user" => $user,
+                "user"         => $user,
             ],
             "refreshToken" => $tokens["refresh_token"],
         ];
@@ -149,11 +154,13 @@ public function verifyPasswordCode(string $email, string $code): bool
     public function logout(): void
     {
         $user = Auth::user();
+
         if (!$user) {
             return;
         }
 
         $tokenName = $user->currentAccessToken()->name;
+
         $deviceId = Str::afterLast($tokenName, "_");
 
         $user
@@ -163,9 +170,7 @@ public function logout(): void
     }
 
     protected function refreshTokenTransaction(
-        PersonalAccessToken $tokenModel,
-        User $user,
-        string $deviceId,
+        PersonalAccessToken $tokenModel, User $user, string $deviceId,
     ): array {
         return DB::transaction(function () use (
             $tokenModel,
@@ -174,11 +179,11 @@ protected function refreshTokenTransaction(
         ): array {
             $tokenModel->update(["expires_at" => Carbon::now()]);
 
-            $accessToken = $user->createAccessToken($deviceId);
+            $accessToken  = $user->createAccessToken($deviceId);
             $refreshToken = $user->createRefreshToken($deviceId);
 
             return [
-                "access_token" => $accessToken,
+                "access_token"  => $accessToken,
                 "refresh_token" => $refreshToken,
             ];
         });

+ 20 - 5
routes/authRoutes/unit.php

@@ -6,13 +6,28 @@
 Route::controller(UnitController::class)->prefix('unit')->group(function () {
     Route::get('/all/select', 'selectList');
 
-    Route::get('/', 'index')->middleware('permission:unit,view');
+    //
 
-    Route::post('/', 'store')->middleware('permission:unit,add');
+    Route::get('/me', 'showMe');
+    Route::post('/me', 'updateMe');
 
-    Route::get('/{id}', 'show')->middleware('permission:unit,view');
+    //
 
-    Route::put('/{id}', 'update')->middleware('permission:unit,edit');
+    Route::get('/', 'index')
+        ->middleware('permission:unit,view');
 
-    Route::delete('/{id}', 'destroy')->middleware('permission:unit,delete');
+    Route::post('/', 'store')
+        ->middleware('permission:unit,add');
+
+    Route::get('/{id}', 'show')
+        ->middleware('permission:unit,view');
+
+    Route::put('/{id}', 'update')
+        ->middleware('permission:unit,edit');
+
+    Route::post('/{id}', 'update')
+        ->middleware('permission:unit,edit');
+
+    Route::delete('/{id}', 'destroy')
+        ->middleware('permission:unit,delete');
 });