Przeglądaj źródła

feat(municipality-sizes): adiciona tabela de portes de municipio (PP/MP/GP/MGP)

Nova tabela `municipality_sizes` com 4 portes fixos para uso em
selects de contrato e como FK das faixas base de royalties.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ebagabee 3 tygodni temu
rodzic
commit
235cf499cf

+ 20 - 0
app/Models/MunicipalitySize.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class MunicipalitySize extends Model
+{
+    use HasFactory;
+
+    protected $table = 'municipality_sizes';
+
+    protected $guarded = ['id'];
+
+    protected $casts = [
+        'created_at' => 'datetime',
+        'updated_at' => 'datetime',
+    ];
+}

+ 23 - 0
database/migrations/2026_04_23_165626_create_municipality_sizes_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('municipality_sizes', function (Blueprint $table) {
+            $table->id();
+            $table->string('acronym', 5)->unique();
+            $table->string('description', 150);
+            $table->timestamps();
+        });
+    }
+
+    public function down(): void
+    {
+        Schema::dropIfExists('municipality_sizes');
+    }
+};

+ 26 - 0
database/seeders/MunicipalitySizeSeeder.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Database\Seeders;
+
+use App\Models\MunicipalitySize;
+use Illuminate\Database\Seeder;
+
+class MunicipalitySizeSeeder extends Seeder
+{
+    public function run(): void
+    {
+        $sizes = [
+            ['acronym' => 'PP',  'description' => 'Até 50 mil habitantes'],
+            ['acronym' => 'MP',  'description' => 'De 50 mil a 100 mil habitantes'],
+            ['acronym' => 'GP',  'description' => 'De 100 mil a 200 mil habitantes'],
+            ['acronym' => 'MGP', 'description' => 'Acima de 200 mil habitantes'],
+        ];
+
+        foreach ($sizes as $size) {
+            MunicipalitySize::firstOrCreate(
+                ['acronym' => $size['acronym']],
+                $size,
+            );
+        }
+    }
+}

+ 11 - 0
routes/authRoutes/municipality_size.php

@@ -0,0 +1,11 @@
+<?php
+
+use App\Models\MunicipalitySize;
+use Illuminate\Support\Facades\Route;
+
+Route::get('/municipality-size', function () {
+    return response()->json([
+        'payload' => MunicipalitySize::orderBy('id')->get(),
+        'message' => null,
+    ]);
+})->middleware('permission:tbr-calculation,view');