Procházet zdrojové kódy

feat: :sparkles: crud tipos melhorias

crud tipos melhorias
Gustavo Zanatta před 1 měsícem
rodič
revize
e1ac4be975

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

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

+ 35 - 0
app/Http/Requests/ImprovementTypeRequest.php

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

+ 37 - 0
app/Http/Resources/ImprovementTypeResource.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
+use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
+use App\Models\ImprovementType;
+
+class ImprovementTypeResource 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,
+            'improvement_type' => $this->improvement_type,
+            'is_active' => $this->is_active,
+            'created_at' => $this->created_at?->format('d/m/Y H:i'),
+            'updated_at' => $this->updated_at?->format('d/m/Y H:i'),
+        ];
+    }
+
+    /**
+     * @param \Illuminate\Database\Eloquent\Collection<ImprovementType> $resource
+     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection<ImprovementTypeResource>
+     */
+    public static function collection($resource): AnonymousResourceCollection
+    {
+        return parent::collection($resource);
+    }
+}

+ 40 - 0
app/Models/ImprovementType.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+/**
+ * @property int $id
+ * @property string $description
+ * @property string $improvement_type
+ * @property bool $is_active
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property \Carbon\Carbon|null $deleted_at
+ */
+class ImprovementType extends Model
+{
+    use HasFactory, SoftDeletes;
+
+    protected $table = 'improvement_types';
+
+    protected $guarded = [
+        'id',
+    ];
+
+    protected $casts = [
+        'created_at' => 'datetime',
+        'updated_at' => 'datetime',
+        'deleted_at' => 'datetime',
+        'is_active' => 'boolean',
+    ];
+
+    protected $fillable = [
+        'description',
+        'improvement_type',
+        'is_active',
+    ];
+}

+ 51 - 0
app/Services/ImprovementTypeService.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Services;
+
+use App\Models\ImprovementType;
+use Illuminate\Database\Eloquent\Collection;
+
+class ImprovementTypeService
+{
+    public function getAll(): Collection
+    {
+        return ImprovementType::query()
+            ->orderBy('created_at', 'desc')
+            ->get();
+    }
+
+    public function findById(int $id): ?ImprovementType
+    {
+        return ImprovementType::find($id);
+    }
+
+    public function create(array $data): ImprovementType
+    {
+        return ImprovementType::create($data);
+    }
+
+    public function update(int $id, array $data): ?ImprovementType
+    {
+        $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_184158_create_improvement_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('improvement_types', function (Blueprint $table) {
+            $table->id();
+            $table->string('description');
+            $table->enum('improvement_type', ['client', 'provider', 'both'])->default('both');
+            $table->boolean('is_active')->default(true);
+            $table->timestamps();
+            $table->softDeletes();
+        });
+    }
+
+    public function down(): void
+    {
+        Schema::dropIfExists('improvement_types');
+    }
+};

+ 6 - 0
database/seeders/PermissionSeeder.php

@@ -88,6 +88,12 @@ class PermissionSeeder extends Seeder
                         "bits" => 271,
                         "children" => [],
                     ],
+                    [
+                        "scope" => "config.improvement_type",
+                        "description" => "Configurações de Tipos de Melhoria",
+                        "bits" => 271,
+                        "children" => [],
+                    ],
                     [
                         "scope" => "config.media",
                         "description" => "Configurações de Mídia",

+ 1 - 0
database/seeders/UserTypePermissionSeeder.php

@@ -37,6 +37,7 @@ class UserTypePermissionSeeder extends Seeder
                         ['scope' => 'config.country', 'bits' => 1],
                         ['scope' => 'config.state', 'bits' => 1],
                         ['scope' => 'config.provider', 'bits' => 271],
+                        ['scope' => 'config.improvement_type', 'bits' => 271],
                         ['scope' => 'config.media', 'bits' => 271],
                         ['scope' => 'config.service_type', 'bits' => 271],
                         ['scope' => 'config.speciality', 'bits' => 271],

+ 14 - 0
routes/authRoutes/improvement_type.php

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