Просмотр исходного кода

feat: :sparkles: edicao do profile do prestador

edicao do profile do prestador
Gustavo Zanatta 1 месяц назад
Родитель
Сommit
50a88fc0f2

+ 52 - 50
app/Http/Controllers/UserController.php

@@ -7,64 +7,66 @@ use App\Services\UserService;
 use App\Http\Requests\UserRequest;
 use App\Http\Resources\UserResource;
 use Illuminate\Http\JsonResponse;
+use Illuminate\Support\Facades\Log;
 
 class UserController extends Controller
 {
-    public function __construct(protected UserService $service) {}
+  public function __construct(protected UserService $service) {}
 
-    public function me(): JsonResponse
-    {
-        $user = $this->service->me();
-        return $this->successResponse(payload: new UserResource($user));
-    }
+  public function me(): JsonResponse
+  {
+    $user = $this->service->me();
+    return $this->successResponse(payload: new UserResource($user));
+  }
 
-    public function index(): JsonResponse
-    {
-        $items = $this->service->getAll();
-        return $this->successResponse(
-            payload: UserResource::collection($items),
-        );
-    }
+  public function index(): JsonResponse
+  {
+    $items = $this->service->getAll();
+    return $this->successResponse(
+      payload: UserResource::collection($items),
+    );
+  }
 
-    public function store(UserRequest $request): JsonResponse
-    {
-        $item = $this->service->create($request->validated());
-        return $this->successResponse(
-            payload: new UserResource($item),
-            message: __("messages.created"),
-            code: 201,
-        );
-    }
+  public function store(UserRequest $request): JsonResponse
+  {
+    $item = $this->service->create($request->validated());
+    return $this->successResponse(
+      payload: new UserResource($item),
+      message: __("messages.created"),
+      code: 201,
+    );
+  }
 
-    public function show(int $id): JsonResponse
-    {
-        $item = $this->service->findById($id);
-        return $this->successResponse(payload: new UserResource($item));
-    }
+  public function show(int $id): JsonResponse
+  {
+    $item = $this->service->findById($id);
+    return $this->successResponse(payload: new UserResource($item));
+  }
 
-    public function update(UserRequest $request, int $id): JsonResponse
-    {
-        $item = $this->service->update($id, $request->validated());
-        return $this->successResponse(
-            payload: new UserResource($item),
-            message: __("messages.updated"),
-        );
-    }
+  public function update(UserRequest $request, int $id): JsonResponse
+  {
+    Log::info("Updating user with ID: $id", ['data' => $request->validated()]);
+    $item = $this->service->update($id, $request->validated());
+    return $this->successResponse(
+      payload: new UserResource($item),
+      message: __("messages.updated"),
+    );
+  }
 
-    public function destroy(int $id): JsonResponse
-    {
-        $this->service->delete($id);
-        return $this->successResponse(
-            message: __("messages.deleted"),
-            code: 204,
-        );
-    }
+  public function destroy(int $id): JsonResponse
+  {
+    $this->service->delete($id);
+    return $this->successResponse(
+      message: __("messages.deleted"),
+      code: 204,
+    );
+  }
 
-    public function getUserTypes(): JsonResponse
-    {
-        $user_types = $this->service->getUserTypes();
-        return $this->successResponse(
-            payload: new UserTypeResource($user_types),
-        );
-    }
+  public function getUserTypes(): JsonResponse
+  {
+    $user_types = $this->service->getUserTypes();
+    return $this->successResponse(
+      payload: new UserTypeResource($user_types),
+    );
+  }
 }

+ 27 - 22
app/Http/Requests/UserRequest.php

@@ -4,33 +4,38 @@ namespace App\Http\Requests;
 
 use Illuminate\Foundation\Http\FormRequest;
 use App\Enums\{
-    UserTypeEnum,
-    LanguageEnum
+  UserTypeEnum,
+  LanguageEnum
 };
 use Illuminate\Validation\Rule;
 
 class UserRequest extends FormRequest
 {
-    public function rules(): array
-    {
-        $rules = [
-            'avatar' => 'sometimes|string|nullable',
-            'name' => 'sometimes|string|nullable',
-            'email' => 'sometimes|email|unique:users,email',
-            'password' => 'sometimes|string|nullable',
-            'type' => ['sometimes', Rule::enum(UserTypeEnum::class)],
-            'language' => ['sometimes', Rule::enum(LanguageEnum::class)],
-        ];
+  public function rules(): array
+  {
+    $rules = [
+      'avatar' => 'sometimes|string|nullable',
+      'name' => 'sometimes|string|nullable',
+      'email' => [
+        'sometimes',
+        'email',
+        Rule::unique('users', 'email')->ignore($this->route('id')),
+      ],
+      'password' => 'sometimes|string|nullable',
+      'type' => ['sometimes', Rule::enum(UserTypeEnum::class)],
+      'language' => ['sometimes', Rule::enum(LanguageEnum::class)],
+      'phone' => 'sometimes|string|nullable',
+    ];
 
-        if ($this->isMethod('post')) {
-            $rules['name'] = 'required|string|max:255';
-            $rules['email'] = 'required|email|unique:users,email';
-            $rules['password'] = 'required|string|min:6';
-            if (!$this->has('language')) {
-                $this->merge(['language' => LanguageEnum::PORTUGUESE->value]);
-            }
-        }
-
-        return $rules;
+    if ($this->isMethod('post')) {
+      $rules['name'] = 'required|string|max:255';
+      $rules['email'] = 'required|email|unique:users,email';
+      $rules['password'] = 'required|string|min:6';
+      if (!$this->has('language')) {
+        $this->merge(['language' => LanguageEnum::PORTUGUESE->value]);
+      }
     }
+
+    return $rules;
+  }
 }

+ 22 - 21
app/Http/Resources/UserResource.php

@@ -9,26 +9,27 @@ use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
 
 class UserResource extends JsonResource
 {
-    /**
-     * Transform the resource into an array.
-     *
-     * @return array<string, mixed>
-     */
-    public function toArray(Request $request): array
-    {
-        return [
-            'id' => $this->id,
-            'name' => $this->name,
-            'email' => $this->email,
-            'language' => $this->language,
-            'type' => $this->type,
-            'created_at' => Carbon::parse($this->created_at)->format('Y-m-d H:i'),
-            'updated_at' => Carbon::parse($this->updated_at)->format('Y-m-d H:i'),
-        ];
-    }
+  /**
+   * Transform the resource into an array.
+   *
+   * @return array<string, mixed>
+   */
+  public function toArray(Request $request): array
+  {
+    return [
+      'id' => $this->id,
+      'name' => $this->name,
+      'email' => $this->email,
+      'phone' => $this->phone,
+      'language' => $this->language,
+      'type' => $this->type,
+      'created_at' => Carbon::parse($this->created_at)->format('Y-m-d H:i'),
+      'updated_at' => Carbon::parse($this->updated_at)->format('Y-m-d H:i'),
+    ];
+  }
 
-    public static function collection($resource): AnonymousResourceCollection
-    {
-        return parent::collection($resource);
-    }
+  public static function collection($resource): AnonymousResourceCollection
+  {
+    return parent::collection($resource);
+  }
 }

+ 77 - 73
database/seeders/UserTypePermissionSeeder.php

@@ -10,83 +10,87 @@ use Illuminate\Support\Facades\Log;
 
 class UserTypePermissionSeeder extends Seeder
 {
-    /**
-     * Seed the application's database.
-     */
-    public function run(): void
-    {
-        foreach (UserTypeEnum::cases() as $userType) {
-            switch ($userType) {
-                case UserTypeEnum::ADMIN:
-                    $permissions = Permission::get()->map(function ($permission) {
-                        return [
-                            'scope' => $permission->scope,
-                            'bits' => $permission->bits,
-                        ];
-                    })->toArray();
-                    $this->seedUserTypePermissions($permissions, UserTypeEnum::ADMIN->value);
-                    break;
+  /**
+   * Seed the application's database.
+   */
+  public function run(): void
+  {
+    foreach (UserTypeEnum::cases() as $userType) {
+      switch ($userType) {
+        case UserTypeEnum::ADMIN:
+          $permissions = Permission::get()->map(function ($permission) {
+            return [
+              'scope' => $permission->scope,
+              'bits' => $permission->bits,
+            ];
+          })->toArray();
+          $this->seedUserTypePermissions($permissions, UserTypeEnum::ADMIN->value);
+          break;
 
-                case UserTypeEnum::USER:
-                    $userPermissions = [
-                        ['scope' => 'dashboard', 'bits' => 1],
-                        ['scope' => 'config.user', 'bits' => 5],
-                        ['scope' => 'config.address', 'bits' => 271],
-                        ['scope' => 'config.city', 'bits' => 1],
-                        ['scope' => 'config.client', 'bits' => 271],
-                        ['scope' => 'config.client_favorite_provider', 'bits' => 271],
-                        ['scope' => 'config.provider_client_block', 'bits' => 271],
-                        ['scope' => 'config.client_provider_block', 'bits' => 271],
-                        ['scope' => 'config.client_payment_method', 'bits' => 271],
-                        ['scope' => 'config.schedule', 'bits' => 271],
-                        ['scope' => 'config.custom_schedule', 'bits' => 271],
-                        ['scope' => 'config.country', 'bits' => 1],
-                        ['scope' => 'config.state', 'bits' => 1],
-                        ['scope' => 'config.provider', 'bits' => 271],
-                        ['scope' => 'config.provider_speciality', 'bits' => 271],
-                        ['scope' => 'config.provider_services_types', 'bits' => 271],
-                        ['scope' => 'config.provider_payment_method', 'bits' => 271],
-                        ['scope' => 'config.provider_working_day', 'bits' => 271],
-                        ['scope' => 'config.provider_blocked_day', 'bits' => 271],
-                        ['scope' => 'config.improvement_type', 'bits' => 271],
-                        ['scope' => 'config.media', 'bits' => 271],
-                        ['scope' => 'config.service_type', 'bits' => 271],
-                        ['scope' => 'config.speciality', 'bits' => 271],
-                        ['scope' => 'config.review', 'bits' => 271],
-                        ['scope' => 'config.review_improvement', 'bits' => 271],
-                    ];
-                    $this->seedUserTypePermissions($userPermissions, UserTypeEnum::USER->value);
-                    break;
+        case UserTypeEnum::USER:
+          $userPermissions = [
+            ['scope' => 'dashboard', 'bits' => 1],
+            ['scope' => 'config.user', 'bits' => 5],
+            ['scope' => 'config.address', 'bits' => 271],
+            ['scope' => 'config.city', 'bits' => 1],
+            ['scope' => 'config.client', 'bits' => 271],
+            ['scope' => 'config.client_favorite_provider', 'bits' => 271],
+            ['scope' => 'config.provider_client_block', 'bits' => 271],
+            ['scope' => 'config.client_provider_block', 'bits' => 271],
+            ['scope' => 'config.client_payment_method', 'bits' => 271],
+            ['scope' => 'config.schedule', 'bits' => 271],
+            ['scope' => 'config.custom_schedule', 'bits' => 271],
+            ['scope' => 'config.country', 'bits' => 1],
+            ['scope' => 'config.state', 'bits' => 1],
+            ['scope' => 'config.provider', 'bits' => 271],
+            ['scope' => 'config.provider_speciality', 'bits' => 271],
+            ['scope' => 'config.provider_services_types', 'bits' => 271],
+            ['scope' => 'config.provider_payment_method', 'bits' => 271],
+            ['scope' => 'config.provider_working_day', 'bits' => 271],
+            ['scope' => 'config.provider_blocked_day', 'bits' => 271],
+            ['scope' => 'config.improvement_type', 'bits' => 271],
+            ['scope' => 'config.media', 'bits' => 271],
+            ['scope' => 'config.service_type', 'bits' => 271],
+            ['scope' => 'config.speciality', 'bits' => 271],
+            ['scope' => 'config.review', 'bits' => 271],
+            ['scope' => 'config.review_improvement', 'bits' => 271],
+          ];
+          $this->seedUserTypePermissions($userPermissions, UserTypeEnum::USER->value);
+          break;
 
-                case UserTypeEnum::PROVIDER:
-                    $providerPermissions = [
-                        ['scope' => 'dashboard', 'bits' => 1],
-                    ];
-                    $this->seedUserTypePermissions($providerPermissions, UserTypeEnum::PROVIDER->value);
-                    break;
+        case UserTypeEnum::PROVIDER:
+          $providerPermissions = [
+            ['scope' => 'dashboard', 'bits' => 1],
+            ['scope' => 'config.user', 'bits' => 5],
+            ['scope' => 'config.address', 'bits' => 271],
+          ];
+          $this->seedUserTypePermissions($providerPermissions, UserTypeEnum::PROVIDER->value);
+          break;
 
-                case UserTypeEnum::CLIENT:
-                    $clientPermissions = [
-                        ['scope' => 'dashboard', 'bits' => 1],
-                    ];
-                    $this->seedUserTypePermissions($clientPermissions, UserTypeEnum::CLIENT->value);
-                    break;
-            }
-        }
+        case UserTypeEnum::CLIENT:
+          $clientPermissions = [
+            ['scope' => 'dashboard', 'bits' => 1],
+            ['scope' => 'config.user', 'bits' => 5],
+            ['scope' => 'config.address', 'bits' => 271],
+          ];
+          $this->seedUserTypePermissions($clientPermissions, UserTypeEnum::CLIENT->value);
+          break;
+      }
     }
+  }
 
-    private function seedUserTypePermissions(array $permissions, string $userType): void
-    {
-        foreach ($permissions as $permissionData) {
-            $permission = Permission::where('scope', $permissionData['scope'])->first();
-            if ($permission) {
-                $userTypePermission = UserTypePermission::firstOrNew([
-                    'user_type' => $userType,
-                    'permission_id' => $permission->id,
-                    'bits' => $permissionData['bits'],
-                ]);
-                $userTypePermission->save();
-            }
-        }
+  private function seedUserTypePermissions(array $permissions, string $userType): void
+  {
+    foreach ($permissions as $permissionData) {
+      $permission = Permission::where('scope', $permissionData['scope'])->first();
+      if ($permission) {
+        $userTypePermission = UserTypePermission::firstOrNew([
+          'user_type' => $userType,
+          'permission_id' => $permission->id,
+          'bits' => $permissionData['bits'],
+        ]);
+        $userTypePermission->save();
+      }
     }
+  }
 }