Ver Fonte

feat: :sparkles: crud tipos servicos

crud tipos servicos
Gustavo Zanatta há 1 mês atrás
pai
commit
f5895c6f1f

+ 46 - 0
app/Http/Controllers/ServiceTypeController.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Services\ServiceTypeService;
+use App\Http\Requests\ServiceTypeRequest;
+use App\Http\Resources\ServiceTypeResource;
+use Illuminate\Http\JsonResponse;
+use Illuminate\Support\Facades\Log;
+
+class ServiceTypeController extends Controller
+{
+    public function __construct(
+        protected ServiceTypeService $service,
+    ) {}
+
+    public function index(): JsonResponse
+    {
+        $items = $this->service->getAll();
+        return $this->successResponse(payload: ServiceTypeResource::collection($items));
+    }
+
+    public function store(ServiceTypeRequest $request): JsonResponse
+    {
+        $item = $this->service->create($request->validated());
+        return $this->successResponse(payload: new ServiceTypeResource($item), message: __('messages.created'), code: 201);
+    }
+
+    public function show(int $id): JsonResponse
+    {
+        $item = $this->service->findById($id);
+        return $this->successResponse(payload: new ServiceTypeResource($item));
+    }
+
+    public function update(ServiceTypeRequest $request, int $id): JsonResponse
+    {
+        $item = $this->service->update($id, $request->validated());
+        return $this->successResponse(payload: new ServiceTypeResource($item), message: __('messages.updated'));
+    }
+
+    public function destroy(int $id): JsonResponse
+    {
+        $this->service->delete($id);
+        return $this->successResponse(message: __('messages.deleted'), code: 204);
+    }
+}

+ 7 - 0
app/Http/Middleware/CheckPermission.php

@@ -36,6 +36,7 @@ class CheckPermission
 
         $hasPermission = false;
         foreach (explode(separator: '|', string: $scopes) as $scope) {
+            Log::info(message: "Checking permission for scope: $scope, permission type: $permissionType");
             if ($this->hasPermission(userPermissions: $userPermissions, scope: $scope, permissionType: $permissionType)) {
                 $hasPermission = true;
                 break;
@@ -64,10 +65,16 @@ class CheckPermission
         ];
 
         $requiredPermission = $bitwisePermissionTable[$permissionType] ?? 0;
+        Log::info('required permission');
+        Log::info($requiredPermission);
 
+        Log::info('user permissions');
+        Log::info($userPermissions);
         $permissionRecord = $userPermissions->first(function ($permission) use ($scope) {
             return $permission->permission->scope === $scope;
         });
+        Log::info('permission record');
+        Log::info($permissionRecord);
 
         if (!$permissionRecord) {
             return false;

+ 32 - 0
app/Http/Requests/ServiceTypeRequest.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class ServiceTypeRequest extends FormRequest
+{
+    public function rules(): array
+    {
+        $rules = [
+            'description' => 'sometimes|string|max:255',
+            'is_active' => 'sometimes|boolean',
+        ];
+
+        if ($this->isMethod('POST')) {
+            $rules['description'] = 'required|string|max:255';
+        }
+
+        return $rules;
+    }
+
+    /**
+    * Add custom messages when needed
+    * public function messages(): array
+    * {
+    *   return [
+    *        'field.required' => __('message.algo'),
+    *    ];
+    * }
+    */
+}

+ 36 - 0
app/Http/Resources/ServiceTypeResource.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
+use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
+use App\Models\ServiceType;
+
+class ServiceTypeResource extends JsonResource
+{
+    /**
+     * Transform the resource into an array.
+     *
+     * @return array<string, mixed>
+     */
+    public function toArray(Request $request): array
+    {
+        return [
+            'id' => $this->id,
+            'description' => $this->description,
+            'is_active' => $this->is_active,
+            'created_at' => $this->created_at?->toISOString(),
+            'updated_at' => $this->updated_at?->toISOString(),
+        ];
+    }
+
+    /**
+     * @param \Illuminate\Database\Eloquent\Collection<ServiceType> $resource
+     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection<ServiceTypeResource>
+     */
+    public static function collection($resource): AnonymousResourceCollection
+    {
+        return parent::collection($resource);
+    }
+}

+ 35 - 0
app/Models/ServiceType.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * @property int $id
+ * @property string $name
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ */
+class ServiceType extends Model
+{
+    use HasFactory;
+
+    protected $table = 'service_types';
+
+    protected $protected = [
+        'id',
+    ];
+
+    protected $casts = [
+        'created_at' => 'datetime',
+        'updated_at' => 'datetime',
+        'is_active' => 'boolean',
+    ];
+
+    protected $fillable = [
+        'description',
+        'is_active',
+    ];
+
+}

+ 51 - 0
app/Services/ServiceTypeService.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Services;
+
+use App\Models\ServiceType;
+use Illuminate\Database\Eloquent\Collection;
+
+class ServiceTypeService
+{
+    public function getAll(): Collection
+    {
+        return ServiceType::query()
+            ->orderBy('created_at', 'desc')
+            ->get();
+    }
+
+    public function findById(int $id): ?ServiceType
+    {
+        return ServiceType::find($id);
+    }
+
+    public function create(array $data): ServiceType
+    {
+        return ServiceType::create($data);
+    }
+
+    public function update(int $id, array $data): ?ServiceType
+    {
+        $model = $this->findById($id);
+
+        if (!$model) {
+            return null;
+        }
+
+        $model->update($data);
+        return $model->fresh();
+    }
+
+    public function delete(int $id): bool
+    {
+        $model = $this->findById($id);
+
+        if (!$model) {
+            return false;
+        }
+
+        return $model->delete();
+    }
+
+    // Add custom business logic methods here
+}

+ 25 - 0
database/migrations/2026_02_06_171802_create_service_types_table.php

@@ -0,0 +1,25 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    public function up(): void
+    {
+        Schema::create('service_types', function (Blueprint $table) {
+            $table->id();
+            $table->string('description');
+            $table->boolean('is_active')->default(true);
+            $table->timestamps();
+            $table->softDeletes();
+
+        });
+    }
+
+    public function down(): void
+    {
+        Schema::dropIfExists('service_types');
+    }
+};

+ 6 - 0
database/seeders/PermissionSeeder.php

@@ -94,6 +94,12 @@ class PermissionSeeder extends Seeder
                         "bits" => 271,
                         "children" => [],
                     ],
+                    [
+                        "scope" => "config.service_type",
+                        "description" => "Configurações de Tipos de Serviço",
+                        "bits" => 271,
+                        "children" => [],
+                    ],
                 ],
             ],
         ];

+ 1 - 0
database/seeders/UserTypePermissionSeeder.php

@@ -38,6 +38,7 @@ class UserTypePermissionSeeder extends Seeder
                         ['scope' => 'config.state', 'bits' => 1],
                         ['scope' => 'config.provider', 'bits' => 271],
                         ['scope' => 'config.media', 'bits' => 271],
+                        ['scope' => 'config.service_type', 'bits' => 271],
                     ];
                     $this->seedUserTypePermissions($userPermissions, UserTypeEnum::USER->value);
                     break;

+ 14 - 0
routes/authRoutes/service_type.php

@@ -0,0 +1,14 @@
+<?php
+
+use Illuminate\Support\Facades\Route;
+use App\Http\Controllers\ServiceTypeController;
+
+Route::get('/service-types', [ServiceTypeController::class, 'index'])->middleware('permission:config.service_type,view');
+
+Route::post('/service-type', [ServiceTypeController::class, 'store'])->middleware('permission:config.service_type,add');
+
+Route::get('/service-type/{id}', [ServiceTypeController::class, 'show'])->middleware('permission:config.service_type,view');
+
+Route::put('/service-type/{id}', [ServiceTypeController::class, 'update'])->middleware('permission:config.service_type,edit');
+
+Route::delete('/service-type/{id}', [ServiceTypeController::class, 'destroy'])->middleware('permission:config.service_type,delete');