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

✨ feat(position,sector): adicionar módulos de cargos e setores

Fase: dev | Origin: melhoria-interna
Gustavo Zanatta 1 тиждень тому
батько
коміт
90a2963497

+ 26 - 0
app/Http/Controllers/PositionController.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Http\Resources\PositionResource;
+use App\Services\PositionService;
+use Illuminate\Http\JsonResponse;
+
+class PositionController extends Controller
+{
+    public function __construct(
+        protected PositionService $service,
+    ) {}
+
+    public function index(): JsonResponse
+    {
+        $items = $this->service->getAllItems();
+        return $this->successResponse(payload: PositionResource::collection($items));
+    }
+
+    public function show(int $id): JsonResponse
+    {
+        $item = $this->service->getItem($id);
+        return $this->successResponse(payload: new PositionResource($item));
+    }
+}

+ 26 - 0
app/Http/Controllers/SectorController.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Http\Resources\SectorResource;
+use App\Services\SectorService;
+use Illuminate\Http\JsonResponse;
+
+class SectorController extends Controller
+{
+    public function __construct(
+        protected SectorService $service,
+    ) {}
+
+    public function index(): JsonResponse
+    {
+        $items = $this->service->getAllItems();
+        return $this->successResponse(payload: SectorResource::collection($items));
+    }
+
+    public function show(int $id): JsonResponse
+    {
+        $item = $this->service->getItem($id);
+        return $this->successResponse(payload: new SectorResource($item));
+    }
+}

+ 20 - 0
app/Http/Resources/PositionResource.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class PositionResource extends JsonResource
+{
+    public function toArray(Request $request): array
+    {
+        return [
+            'id'         => $this->id,
+            'name'       => $this->name,
+            'active'     => $this->active,
+            'created_at' => $this->created_at?->format('Y-m-d H:i:s'),
+            'updated_at' => $this->updated_at?->format('Y-m-d H:i:s'),
+        ];
+    }
+}

+ 20 - 0
app/Http/Resources/SectorResource.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Http\Resources;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
+
+class SectorResource extends JsonResource
+{
+    public function toArray(Request $request): array
+    {
+        return [
+            'id'         => $this->id,
+            'name'       => $this->name,
+            'active'     => $this->active,
+            'created_at' => $this->created_at?->format('Y-m-d H:i:s'),
+            'updated_at' => $this->updated_at?->format('Y-m-d H:i:s'),
+        ];
+    }
+}

+ 23 - 0
app/Models/Position.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+
+class Position extends Model
+{
+    protected $guarded = ['id'];
+
+    protected function casts(): array
+    {
+        return [
+            'active' => 'boolean',
+        ];
+    }
+
+    public function users(): HasMany
+    {
+        return $this->hasMany(User::class);
+    }
+}

+ 23 - 0
app/Models/Sector.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+
+class Sector extends Model
+{
+    protected $guarded = ['id'];
+
+    protected function casts(): array
+    {
+        return [
+            'active' => 'boolean',
+        ];
+    }
+
+    public function users(): HasMany
+    {
+        return $this->hasMany(User::class);
+    }
+}

+ 19 - 0
app/Services/PositionService.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Services;
+
+use App\Models\Position;
+use Illuminate\Database\Eloquent\Collection;
+
+class PositionService
+{
+    public function getAllItems(): Collection
+    {
+        return Position::where('active', true)->orderBy('name')->get();
+    }
+
+    public function getItem(int $id): Position
+    {
+        return Position::findOrFail($id);
+    }
+}

+ 19 - 0
app/Services/SectorService.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Services;
+
+use App\Models\Sector;
+use Illuminate\Database\Eloquent\Collection;
+
+class SectorService
+{
+    public function getAllItems(): Collection
+    {
+        return Sector::where('active', true)->orderBy('name')->get();
+    }
+
+    public function getItem(int $id): Sector
+    {
+        return Sector::findOrFail($id);
+    }
+}

+ 23 - 0
database/migrations/2025_01_01_000001_create_positions_table.php

@@ -0,0 +1,23 @@
+<?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('positions', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->boolean('active')->default(true);
+            $table->timestamps();
+        });
+    }
+
+    public function down(): void
+    {
+        Schema::dropIfExists('positions');
+    }
+};

+ 23 - 0
database/migrations/2025_01_01_000002_create_sectors_table.php

@@ -0,0 +1,23 @@
+<?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('sectors', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->boolean('active')->default(true);
+            $table->timestamps();
+        });
+    }
+
+    public function down(): void
+    {
+        Schema::dropIfExists('sectors');
+    }
+};

+ 10 - 0
routes/authRoutes/position.php

@@ -0,0 +1,10 @@
+<?php
+
+use App\Http\Controllers\PositionController;
+use Illuminate\Support\Facades\Route;
+
+Route::controller(PositionController::class)->prefix('position')->group(function () {
+    Route::get('/', 'index')->middleware('permission:config.position,view');
+
+    Route::get('/{id}', 'show')->middleware('permission:config.position,view');
+});

+ 10 - 0
routes/authRoutes/sector.php

@@ -0,0 +1,10 @@
+<?php
+
+use App\Http\Controllers\SectorController;
+use Illuminate\Support\Facades\Route;
+
+Route::controller(SectorController::class)->prefix('sector')->group(function () {
+    Route::get('/', 'index')->middleware('permission:config.sector,view');
+
+    Route::get('/{id}', 'show')->middleware('permission:config.sector,view');
+});