From 6d0423fa34080a523495f2bb57af451fa81553ab Mon Sep 17 00:00:00 2001 From: KKlochko Date: Tue, 13 Jun 2023 19:15:02 +0300 Subject: [PATCH] Added City model, resource and its API. --- .../Controllers/API/v2/CityController.php | 87 +++++++++++++++++++ app/Http/Requests/StoreCityRequest.php | 28 ++++++ app/Http/Requests/UpdateCityRequest.php | 28 ++++++ app/Http/Resources/API/v2/CityCollection.php | 19 ++++ app/Http/Resources/API/v2/CityResource.php | 24 +++++ app/Models/City.php | 11 +++ app/Policies/CityPolicy.php | 66 ++++++++++++++ database/factories/CityFactory.php | 24 +++++ .../2023_06_13_154936_create_cities_table.php | 29 +++++++ database/seeders/CitySeeder.php | 20 +++++ database/seeders/DatabaseSeeder.php | 11 +-- routes/api.php | 11 +++ 12 files changed, 351 insertions(+), 7 deletions(-) create mode 100644 app/Http/Controllers/API/v2/CityController.php create mode 100644 app/Http/Requests/StoreCityRequest.php create mode 100644 app/Http/Requests/UpdateCityRequest.php create mode 100644 app/Http/Resources/API/v2/CityCollection.php create mode 100644 app/Http/Resources/API/v2/CityResource.php create mode 100644 app/Models/City.php create mode 100644 app/Policies/CityPolicy.php create mode 100644 database/factories/CityFactory.php create mode 100644 database/migrations/2023_06_13_154936_create_cities_table.php create mode 100644 database/seeders/CitySeeder.php diff --git a/app/Http/Controllers/API/v2/CityController.php b/app/Http/Controllers/API/v2/CityController.php new file mode 100644 index 0000000..a048faa --- /dev/null +++ b/app/Http/Controllers/API/v2/CityController.php @@ -0,0 +1,87 @@ +input('name'); + $uuid = $request->input('uuid'); + + // Process the received name and uuid as required + + // Return a response + return response()->json([ + 'message' => 'City selected successfully', + 'name' => $name, + 'uuid' => $uuid, + ]); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(StoreCityRequest $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(City $city) + { + return new CityResource($city); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(City $city) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(UpdateCityRequest $request, City $city) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(City $city) + { + // + } +} diff --git a/app/Http/Requests/StoreCityRequest.php b/app/Http/Requests/StoreCityRequest.php new file mode 100644 index 0000000..737e72c --- /dev/null +++ b/app/Http/Requests/StoreCityRequest.php @@ -0,0 +1,28 @@ + + */ + public function rules(): array + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/UpdateCityRequest.php b/app/Http/Requests/UpdateCityRequest.php new file mode 100644 index 0000000..7ebcfc7 --- /dev/null +++ b/app/Http/Requests/UpdateCityRequest.php @@ -0,0 +1,28 @@ + + */ + public function rules(): array + { + return [ + // + ]; + } +} diff --git a/app/Http/Resources/API/v2/CityCollection.php b/app/Http/Resources/API/v2/CityCollection.php new file mode 100644 index 0000000..ad1d7c7 --- /dev/null +++ b/app/Http/Resources/API/v2/CityCollection.php @@ -0,0 +1,19 @@ + + */ + public function toArray(Request $request): array + { + return parent::toArray($request); + } +} diff --git a/app/Http/Resources/API/v2/CityResource.php b/app/Http/Resources/API/v2/CityResource.php new file mode 100644 index 0000000..e02c2cd --- /dev/null +++ b/app/Http/Resources/API/v2/CityResource.php @@ -0,0 +1,24 @@ + + */ + public function toArray(Request $request): array + { + //return parent::toArray($request); + return [ + 'id' => $this->id, + 'uuid' => $this->uuid, + 'name' => $this->name, + ]; + } +} diff --git a/app/Models/City.php b/app/Models/City.php new file mode 100644 index 0000000..fe7fda8 --- /dev/null +++ b/app/Models/City.php @@ -0,0 +1,11 @@ + + */ +class CityFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'uuid' => $this->faker->uuid(), + 'name' => $this->faker->city(), + ]; + } +} diff --git a/database/migrations/2023_06_13_154936_create_cities_table.php b/database/migrations/2023_06_13_154936_create_cities_table.php new file mode 100644 index 0000000..0e935fd --- /dev/null +++ b/database/migrations/2023_06_13_154936_create_cities_table.php @@ -0,0 +1,29 @@ +id(); + $table->string('uuid'); + $table->string('name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('cities'); + } +}; diff --git a/database/seeders/CitySeeder.php b/database/seeders/CitySeeder.php new file mode 100644 index 0000000..79ef947 --- /dev/null +++ b/database/seeders/CitySeeder.php @@ -0,0 +1,20 @@ +count(10) + ->create(); + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a9f4519..8ce213d 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,7 +2,7 @@ namespace Database\Seeders; -// use Illuminate\Database\Console\Seeds\WithoutModelEvents; +use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder @@ -12,11 +12,8 @@ class DatabaseSeeder extends Seeder */ public function run(): void { - // \App\Models\User::factory(10)->create(); - - // \App\Models\User::factory()->create([ - // 'name' => 'Test User', - // 'email' => 'test@example.com', - // ]); + $this->call([ + CitySeeder::class, + ]); } } diff --git a/routes/api.php b/routes/api.php index 889937e..fd729ed 100644 --- a/routes/api.php +++ b/routes/api.php @@ -17,3 +17,14 @@ use Illuminate\Support\Facades\Route; Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); }); + +// api/v2 +Route::group([ + 'prefix' => 'v2', + 'namespace' => 'App\Http\Controllers\API\v2' +], + function(){ + Route::apiResource('cities', CityController::class); + } +); +