浏览代码

fix: service de dashboard agora faz verificao do tipo de user para features que sao especificas para um tipo

Gustavo Mantovani 2 周之前
父节点
当前提交
3de535c8a4

+ 0 - 1
app/Http/Controllers/ClientCalendarController.php

@@ -18,7 +18,6 @@ class ClientCalendarController extends Controller
             return $this->successResponse(payload: $dados);
         } catch (\Exception $e) {
             Log::error('Error fetching client calendar: '.$e->getMessage());
-
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }

+ 10 - 3
app/Http/Controllers/DashboardController.php

@@ -5,6 +5,8 @@ namespace App\Http\Controllers;
 use App\Http\Resources\DashboardClienteResource;
 use App\Http\Resources\DashboardPrestadorResource;
 use App\Services\DashboardService;
+use Illuminate\Auth\Access\AuthorizationException;
+use Illuminate\Database\Eloquent\ModelNotFoundException;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Support\Facades\Log;
 
@@ -20,9 +22,12 @@ class DashboardController extends Controller
             return $this->successResponse(
                 payload: new DashboardClienteResource($dados),
             );
+        } catch (AuthorizationException $e) {
+            return $this->errorResponse(message: $e->getMessage(), code: 403);
+        } catch (ModelNotFoundException) {
+            return $this->errorResponse(message: 'Cliente não encontrado.', code: 404);
         } catch (\Exception $e) {
             Log::error('Erro ao obter dados do dashboard do cliente: '.$e->getMessage());
-
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }
@@ -35,7 +40,6 @@ class DashboardController extends Controller
             return $this->successResponse(payload: $dados);
         } catch (\Exception $e) {
             Log::error('Erro ao obter detalhes do schedule do cliente: '.$e->getMessage());
-
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }
@@ -48,9 +52,12 @@ class DashboardController extends Controller
             return $this->successResponse(
                 payload: new DashboardPrestadorResource($dados),
             );
+        } catch (AuthorizationException $e) {
+            return $this->errorResponse(message: $e->getMessage(), code: 403);
+        } catch (ModelNotFoundException) {
+            return $this->errorResponse(message: 'Prestador não encontrado.', code: 404);
         } catch (\Exception $e) {
             Log::error('Erro ao obter dados do dashboard do prestador: '.$e->getMessage());
-
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }

+ 0 - 1
app/Http/Controllers/ProviderCalendarController.php

@@ -18,7 +18,6 @@ class ProviderCalendarController extends Controller
             return $this->successResponse(payload: $dados);
         } catch (\Exception $e) {
             Log::error('Error fetching provider calendar: '.$e->getMessage());
-
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }

+ 0 - 1
app/Http/Controllers/SearchController.php

@@ -19,7 +19,6 @@ class SearchController extends Controller
             return $this->successResponse(payload: $dados);
         } catch (\Exception $e) {
             Log::error('Erro ao buscar prestadores: '.$e->getMessage());
-
             return $this->errorResponse(message: __('messages.error_fetching_data'), code: 500);
         }
     }

+ 12 - 2
app/Services/DashboardService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use App\Enums\UserTypeEnum;
 use App\Models\Address;
 use App\Models\Client;
 use App\Models\ClientFavoriteProvider;
@@ -13,6 +14,7 @@ use App\Models\Schedule;
 use App\Models\ScheduleProposal;
 use App\Models\Speciality;
 use App\Rules\ScheduleBusinessRules;
+use Illuminate\Auth\Access\AuthorizationException;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 
@@ -26,7 +28,11 @@ class DashboardService
     {
         $user = Auth::user();
 
-        $cliente = Client::where('user_id', $user->id)->first();
+        if ($user->type !== UserTypeEnum::CLIENT) {
+            throw new AuthorizationException('Apenas clientes podem acessar este recurso.');
+        }
+
+        $cliente = Client::where('user_id', $user->id)->firstOrFail();
 
         $headerBar = [
             'rating'        => $cliente->average_rating,
@@ -318,7 +324,11 @@ class DashboardService
     {
         $user = Auth::user();
 
-        $provider = Provider::where('user_id', $user->id)->first();
+        if ($user->type !== UserTypeEnum::PROVIDER) {
+            throw new AuthorizationException('Apenas prestadores podem acessar este recurso.');
+        }
+
+        $provider = Provider::where('user_id', $user->id)->firstOrFail();
 
         $headerBar = [
             'rating'         => $provider->average_rating,