ソースを参照

District and area added

Alexander Musikhin 11 ヶ月 前
コミット
731111009f

+ 48 - 0
app/Http/Controllers/AreaController.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Dictionary\Area;
+use Illuminate\Http\Request;
+
+class AreaController extends Controller
+{
+    public function index()
+    {
+        return Area::all();
+    }
+
+    public function store(Request $request)
+    {
+        $request->validate([
+            'name' => ['required'],
+            'district_id' => ['required', 'integer'],
+        ]);
+
+        return Area::create($request->validated());
+    }
+
+    public function show(Area $area)
+    {
+        return $area;
+    }
+
+    public function update(Request $request, Area $area)
+    {
+        $request->validate([
+            'name' => ['required'],
+            'district_id' => ['required', 'integer'],
+        ]);
+
+        $area->update($request->validated());
+
+        return $area;
+    }
+
+    public function destroy(Area $area)
+    {
+        $area->delete();
+
+        return response()->json();
+    }
+}

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

@@ -0,0 +1,46 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Dictionary\District;
+use Illuminate\Http\Request;
+
+class DistrictController extends Controller
+{
+    public function index()
+    {
+        return District::all();
+    }
+
+    public function store(Request $request)
+    {
+        $request->validate([
+            'name' => ['required'],
+        ]);
+
+        return District::create($request->validated());
+    }
+
+    public function show(District $district)
+    {
+        return $district;
+    }
+
+    public function update(Request $request, District $district)
+    {
+        $request->validate([
+            'name' => ['required'],
+        ]);
+
+        $district->update($request->validated());
+
+        return $district;
+    }
+
+    public function destroy(District $district)
+    {
+        $district->delete();
+
+        return response()->json();
+    }
+}

+ 25 - 0
app/Models/Dictionary/Area.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Models\Dictionary;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class Area extends Model
+{
+    use SoftDeletes;
+
+    protected $fillable = [
+        'name',
+        'district_id',
+    ];
+
+    /**
+     * @return BelongsTo
+     */
+    public function district(): BelongsTo
+    {
+        return $this->belongsTo(District::class);
+    }
+}

+ 25 - 0
app/Models/Dictionary/District.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Models\Dictionary;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class District extends Model
+{
+    use SoftDeletes;
+
+    protected $fillable = [
+        'shortname',
+        'name',
+    ];
+
+    /**
+     * @return HasMany
+     */
+    public function areas(): HasMany
+    {
+        return $this->hasMany(Area::class);
+    }
+}

+ 23 - 0
database/migrations/2024_12_19_151118_create_districts_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('districts', function (Blueprint $table) {
+            $table->id();
+            $table->string('shortname');
+            $table->string('name');
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    public function down(): void
+    {
+        Schema::dropIfExists('districts');
+    }
+};

+ 23 - 0
database/migrations/2024_12_19_152055_create_areas_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('areas', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->foreignId('district_id')->constrained('districts')->restrictOnDelete();
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    public function down(): void
+    {
+        Schema::dropIfExists('areas');
+    }
+};

+ 187 - 0
database/seeders/AreaSeeder.php

@@ -0,0 +1,187 @@
+<?php
+
+namespace Database\Seeders;
+
+use App\Models\Dictionary\Area;
+use Illuminate\Database\Console\Seeds\WithoutModelEvents;
+use Illuminate\Database\Seeder;
+
+class AreaSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     */
+    public function run(): void
+    {
+        // ЦАО
+        Area::updateOrCreate(['name' => 'Арбат'], ['district_id' => '1']);
+        Area::updateOrCreate(['name' => 'Басманный'], ['district_id' => '1']);
+        Area::updateOrCreate(['name' => 'Замоскворечье'], ['district_id' => '1']);
+        Area::updateOrCreate(['name' => 'Красносельский'], ['district_id' => '1']);
+        Area::updateOrCreate(['name' => 'Мещанский'], ['district_id' => '1']);
+        Area::updateOrCreate(['name' => 'Пресненский'], ['district_id' => '1']);
+        Area::updateOrCreate(['name' => 'Таганский'], ['district_id' => '1']);
+        Area::updateOrCreate(['name' => 'Тверской'], ['district_id' => '1']);
+        Area::updateOrCreate(['name' => 'Хамовники'], ['district_id' => '1']);
+        Area::updateOrCreate(['name' => 'Якиманка'], ['district_id' => '1']);
+
+        // САО
+        Area::updateOrCreate(['name' => 'Аэропорт'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Беговой'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Бескудниковский'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Войковский'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Головинский'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Дегунино Восточное'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Дегунино Западное'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Дмитровский'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Коптево'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Левобережный'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Молжаниновский'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Савёловский'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Сокол'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Тимирязевский'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Ховрино'], ['district_id' => '2']);
+        Area::updateOrCreate(['name' => 'Хорошёвский'], ['district_id' => '2']);
+
+        // СВАО
+        Area::updateOrCreate(['name' => 'Алексеевский'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Алтуфьевский'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Бабушкинский'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Бибирево'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Бутырский'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Лианозово'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Лосиноостровский'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Марфино'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Марьина роща'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Медведково Северное'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Медведково Южное'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Останкинский'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Отрадное'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Ростокино'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Свиблово'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Северный'], ['district_id' => '3']);
+        Area::updateOrCreate(['name' => 'Ярославский'], ['district_id' => '3']);
+
+        // ВАО
+        Area::updateOrCreate(['name' => 'Богородское'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Вешняки'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Восточный'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Гольяново'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Ивановское'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Измайлово Восточное'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Измайлово'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Измайлово Северное'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Косино-Ухтомский'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Метрогородок'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Новогиреево'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Новокосино'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Перово'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Преображенское'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Соколиная гора'], ['district_id' => '4']);
+        Area::updateOrCreate(['name' => 'Сокольники'], ['district_id' => '4']);
+
+        // ЮВАО
+        Area::updateOrCreate(['name' => 'Выхино-Жулебино'], ['district_id' => '5']);
+        Area::updateOrCreate(['name' => 'Капотня'], ['district_id' => '5']);
+        Area::updateOrCreate(['name' => 'Кузьминки'], ['district_id' => '5']);
+        Area::updateOrCreate(['name' => 'Лефортово'], ['district_id' => '5']);
+        Area::updateOrCreate(['name' => 'Люблино'], ['district_id' => '5']);
+        Area::updateOrCreate(['name' => 'Марьино'], ['district_id' => '5']);
+        Area::updateOrCreate(['name' => 'Некрасовка'], ['district_id' => '5']);
+        Area::updateOrCreate(['name' => 'Нижегородский'], ['district_id' => '5']);
+        Area::updateOrCreate(['name' => 'Печатники'], ['district_id' => '5']);
+        Area::updateOrCreate(['name' => 'Рязанский'], ['district_id' => '5']);
+        Area::updateOrCreate(['name' => 'Текстильщики'], ['district_id' => '5']);
+        Area::updateOrCreate(['name' => 'Южнопортовый'], ['district_id' => '5']);
+
+        // ЮАО
+        Area::updateOrCreate(['name' => 'Бирюлёво Восточное'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Бирюлёво Западное'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Братеево'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Даниловский'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Донской'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Зябликово'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Москворечье-Сабурово'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Нагатино-Садовники'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Нагатинский затон'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Нагорный'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Орехово-Борисово Северное'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Орехово-Борисово Южное'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Царицыно'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Чертаново Северное'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Чертаново Центральное'], ['district_id' => '6']);
+        Area::updateOrCreate(['name' => 'Чертаново Южное'], ['district_id' => '6']);
+
+        // ЮЗАО
+        Area::updateOrCreate(['name' => 'Академический'], ['district_id' => '7']);
+        Area::updateOrCreate(['name' => 'Бутово Северное'], ['district_id' => '7']);
+        Area::updateOrCreate(['name' => 'Бутово Южное'], ['district_id' => '7']);
+        Area::updateOrCreate(['name' => 'Гагаринский'], ['district_id' => '7']);
+        Area::updateOrCreate(['name' => 'Зюзино'], ['district_id' => '7']);
+        Area::updateOrCreate(['name' => 'Коньково'], ['district_id' => '7']);
+        Area::updateOrCreate(['name' => 'Котловка'], ['district_id' => '7']);
+        Area::updateOrCreate(['name' => 'Ломоносовский'], ['district_id' => '7']);
+        Area::updateOrCreate(['name' => 'Обручевский'], ['district_id' => '7']);
+        Area::updateOrCreate(['name' => 'Тёплый Стан'], ['district_id' => '7']);
+        Area::updateOrCreate(['name' => 'Черёмушки'], ['district_id' => '7']);
+        Area::updateOrCreate(['name' => 'Ясенево'], ['district_id' => '7']);
+
+        // ЗАО
+        Area::updateOrCreate(['name' => 'Внуково'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Дорогомилово'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Крылатское'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Кунцево'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Можайский'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Ново-Переделкино'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Очаково-Матвеевское'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Проспект Вернадского'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Раменки'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Солнцево'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Тропарёво-Никулино'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Филёвский парк'], ['district_id' => '8']);
+        Area::updateOrCreate(['name' => 'Фили-Давыдково'], ['district_id' => '8']);
+
+        // СЗАО
+        Area::updateOrCreate(['name' => 'Куркино'], ['district_id' => '9']);
+        Area::updateOrCreate(['name' => 'Митино'], ['district_id' => '9']);
+        Area::updateOrCreate(['name' => 'Покровское-Стрешнево'], ['district_id' => '9']);
+        Area::updateOrCreate(['name' => 'Строгино'], ['district_id' => '9']);
+        Area::updateOrCreate(['name' => 'Тушино Северное'], ['district_id' => '9']);
+        Area::updateOrCreate(['name' => 'Тушино Южное'], ['district_id' => '9']);
+        Area::updateOrCreate(['name' => 'Хорошёво-Мневники'], ['district_id' => '9']);
+        Area::updateOrCreate(['name' => 'Щукино'], ['district_id' => '9']);
+
+        // ЗелАО
+        Area::updateOrCreate(['name' => 'Крюково'], ['district_id' => '10']);
+        Area::updateOrCreate(['name' => 'Матушкино'], ['district_id' => '10']);
+        Area::updateOrCreate(['name' => 'Савёлки'], ['district_id' => '10']);
+        Area::updateOrCreate(['name' => 'Силино'], ['district_id' => '10']);
+        Area::updateOrCreate(['name' => 'Старое Крюково'], ['district_id' => '10']);
+
+        // НАО
+        Area::updateOrCreate(['name' => 'Внуковское'], ['district_id' => '11']);
+        Area::updateOrCreate(['name' => 'Воскресенское'], ['district_id' => '11']);
+        Area::updateOrCreate(['name' => 'Десёновское'], ['district_id' => '11']);
+        Area::updateOrCreate(['name' => 'Кокошкино'], ['district_id' => '11']);
+        Area::updateOrCreate(['name' => 'Марушкинское'], ['district_id' => '11']);
+        Area::updateOrCreate(['name' => 'Московский'], ['district_id' => '11']);
+        Area::updateOrCreate(['name' => 'Мосрентген'], ['district_id' => '11']);
+        Area::updateOrCreate(['name' => 'Рязановское'], ['district_id' => '11']);
+        Area::updateOrCreate(['name' => 'Сосенское'], ['district_id' => '11']);
+        Area::updateOrCreate(['name' => 'Филимонковское'], ['district_id' => '11']);
+        Area::updateOrCreate(['name' => 'Щербинка'], ['district_id' => '11']);
+
+        // ТАО
+        Area::updateOrCreate(['name' => 'Вороновское'], ['district_id' => '12']);
+        Area::updateOrCreate(['name' => 'Киевский'], ['district_id' => '12']);
+        Area::updateOrCreate(['name' => 'Кленовское'], ['district_id' => '12']);
+        Area::updateOrCreate(['name' => 'Краснопахорское'], ['district_id' => '12']);
+        Area::updateOrCreate(['name' => 'Михайлово-Ярцевское'], ['district_id' => '12']);
+        Area::updateOrCreate(['name' => 'Новофедоровское'], ['district_id' => '12']);
+        Area::updateOrCreate(['name' => 'Первомайское'], ['district_id' => '12']);
+        Area::updateOrCreate(['name' => 'Роговское'], ['district_id' => '12']);
+        Area::updateOrCreate(['name' => 'Троицк'], ['district_id' => '12']);
+        Area::updateOrCreate(['name' => 'Щаповское'], ['district_id' => '12']);
+
+    }
+}

+ 2 - 8
database/seeders/DatabaseSeeder.php

@@ -15,13 +15,7 @@ class DatabaseSeeder extends Seeder
      */
     public function run(): void
     {
-        // User::factory(10)->create();
-
-        User::factory()->create([
-            'name' => 'Alexander M',
-            'email' => 'dth.pto@gmail.com',
-            'role' => Role::ADMIN,
-            'password' => Hash::make('1323'),
-        ]);
+        $this->call(DistrictSeeder::class);
+        $this->call(AreaSeeder::class);
     }
 }

+ 29 - 0
database/seeders/DistrictSeeder.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace Database\Seeders;
+
+use App\Models\Dictionary\District;
+use Illuminate\Database\Console\Seeds\WithoutModelEvents;
+use Illuminate\Database\Seeder;
+
+class DistrictSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     */
+    public function run(): void
+    {
+        District::updateOrCreate(['id' => 1],  ['shortname' => 'ЦАО', 'name' => 'Центральный']);
+        District::updateOrCreate(['id' => 2],  ['shortname' => 'САО', 'name' => 'Северный']);
+        District::updateOrCreate(['id' => 3],  ['shortname' => 'СВАО', 'name' => 'Северо-восточный']);
+        District::updateOrCreate(['id' => 4],  ['shortname' => 'ВАО', 'name' => 'Восточный']);
+        District::updateOrCreate(['id' => 5],  ['shortname' => 'ЮВАО', 'name' => 'Юго-восточный']);
+        District::updateOrCreate(['id' => 6],  ['shortname' => 'ЮАО', 'name' => 'Южный']);
+        District::updateOrCreate(['id' => 7],  ['shortname' => 'ЮЗАО', 'name' => 'Юго-западный']);
+        District::updateOrCreate(['id' => 8],  ['shortname' => 'ЗАО', 'name' => 'Западный']);
+        District::updateOrCreate(['id' => 9],  ['shortname' => 'СЗАО', 'name' => 'Северо-западный']);
+        District::updateOrCreate(['id' => 10], ['shortname' => 'ЗелАО', 'name' => 'Зеленоградский']);
+        District::updateOrCreate(['id' => 11], ['shortname' => 'НАО', 'name' => 'Новомосковский']);
+        District::updateOrCreate(['id' => 12], ['shortname' => 'ТАО', 'name' => 'Троицкий']);
+    }
+}