Added City model, resource and its API.

main
KKlochko 2 years ago
parent 15f16db37c
commit 6d0423fa34

@ -0,0 +1,87 @@
<?php
namespace App\Http\Controllers\API\v2;
use App\Http\Requests\StoreCityRequest;
use App\Http\Requests\UpdateCityRequest;
use App\Models\City;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Resources\API\v2\CityResource;
use App\Http\Resources\API\v2\CityCollection;
class CityController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
return new CityCollection(City::all());
}
public function selectCity(Request $request)
{
$name = $request->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)
{
//
}
}

@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreCityRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>
*/
public function rules(): array
{
return [
//
];
}
}

@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateCityRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>
*/
public function rules(): array
{
return [
//
];
}
}

@ -0,0 +1,19 @@
<?php
namespace App\Http\Resources\API\v2;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection;
class CityCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array.
*
* @return array<int|string, mixed>
*/
public function toArray(Request $request): array
{
return parent::toArray($request);
}
}

@ -0,0 +1,24 @@
<?php
namespace App\Http\Resources\API\v2;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class CityResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
//return parent::toArray($request);
return [
'id' => $this->id,
'uuid' => $this->uuid,
'name' => $this->name,
];
}
}

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class City extends Model
{
use HasFactory;
}

@ -0,0 +1,66 @@
<?php
namespace App\Policies;
use App\Models\City;
use App\Models\User;
use Illuminate\Auth\Access\Response;
class CityPolicy
{
/**
* Determine whether the user can view any models.
*/
public function viewAny(User $user): bool
{
//
}
/**
* Determine whether the user can view the model.
*/
public function view(User $user, City $city): bool
{
//
}
/**
* Determine whether the user can create models.
*/
public function create(User $user): bool
{
//
}
/**
* Determine whether the user can update the model.
*/
public function update(User $user, City $city): bool
{
//
}
/**
* Determine whether the user can delete the model.
*/
public function delete(User $user, City $city): bool
{
//
}
/**
* Determine whether the user can restore the model.
*/
public function restore(User $user, City $city): bool
{
//
}
/**
* Determine whether the user can permanently delete the model.
*/
public function forceDelete(User $user, City $city): bool
{
//
}
}

@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\City>
*/
class CityFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'uuid' => $this->faker->uuid(),
'name' => $this->faker->city(),
];
}
}

@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('cities', function (Blueprint $table) {
$table->id();
$table->string('uuid');
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('cities');
}
};

@ -0,0 +1,20 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\City;
class CitySeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
City::factory()
->count(10)
->create();
}
}

@ -2,7 +2,7 @@
namespace Database\Seeders; namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder class DatabaseSeeder extends Seeder
@ -12,11 +12,8 @@ class DatabaseSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
// \App\Models\User::factory(10)->create(); $this->call([
CitySeeder::class,
// \App\Models\User::factory()->create([ ]);
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
} }
} }

@ -17,3 +17,14 @@ use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->get('/user', function (Request $request) { Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user(); return $request->user();
}); });
// api/v2
Route::group([
'prefix' => 'v2',
'namespace' => 'App\Http\Controllers\API\v2'
],
function(){
Route::apiResource('cities', CityController::class);
}
);

Loading…
Cancel
Save