From 18bd8498277eb2f9fc43f28b4002b351e4a5eca7 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Wed, 14 Jun 2023 17:16:50 +0300 Subject: [PATCH] Added Item model, resource and its API. Updated Category model to have Items. --- .../Controllers/API/v2/ItemController.php | 71 +++++++++++++++++++ app/Http/Requests/StoreItemRequest.php | 28 ++++++++ app/Http/Requests/UpdateItemRequest.php | 28 ++++++++ app/Http/Resources/API/v2/ItemCollection.php | 19 +++++ app/Http/Resources/API/v2/ItemResource.php | 27 +++++++ app/Models/Category.php | 6 ++ app/Models/Item.php | 26 +++++++ app/Policies/ItemPolicy.php | 66 +++++++++++++++++ database/factories/ItemFactory.php | 23 ++++++ .../2023_06_14_140000_create_items_table.php | 38 ++++++++++ database/seeders/ItemSeeder.php | 17 +++++ routes/api.php | 1 + 12 files changed, 350 insertions(+) create mode 100644 app/Http/Controllers/API/v2/ItemController.php create mode 100644 app/Http/Requests/StoreItemRequest.php create mode 100644 app/Http/Requests/UpdateItemRequest.php create mode 100644 app/Http/Resources/API/v2/ItemCollection.php create mode 100644 app/Http/Resources/API/v2/ItemResource.php create mode 100644 app/Models/Item.php create mode 100644 app/Policies/ItemPolicy.php create mode 100644 database/factories/ItemFactory.php create mode 100644 database/migrations/2023_06_14_140000_create_items_table.php create mode 100644 database/seeders/ItemSeeder.php diff --git a/app/Http/Controllers/API/v2/ItemController.php b/app/Http/Controllers/API/v2/ItemController.php new file mode 100644 index 0000000..3f23356 --- /dev/null +++ b/app/Http/Controllers/API/v2/ItemController.php @@ -0,0 +1,71 @@ + + */ + public function rules(): array + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/UpdateItemRequest.php b/app/Http/Requests/UpdateItemRequest.php new file mode 100644 index 0000000..bc70d5a --- /dev/null +++ b/app/Http/Requests/UpdateItemRequest.php @@ -0,0 +1,28 @@ + + */ + public function rules(): array + { + return [ + // + ]; + } +} diff --git a/app/Http/Resources/API/v2/ItemCollection.php b/app/Http/Resources/API/v2/ItemCollection.php new file mode 100644 index 0000000..b3c472a --- /dev/null +++ b/app/Http/Resources/API/v2/ItemCollection.php @@ -0,0 +1,19 @@ + + */ + public function toArray(Request $request): array + { + return parent::toArray($request); + } +} diff --git a/app/Http/Resources/API/v2/ItemResource.php b/app/Http/Resources/API/v2/ItemResource.php new file mode 100644 index 0000000..747c4b4 --- /dev/null +++ b/app/Http/Resources/API/v2/ItemResource.php @@ -0,0 +1,27 @@ + + */ + public function toArray(Request $request): array + { + return [ + 'id' => $this->id, + 'uuid' => $this->uuid, + 'name' => $this->name, + 'url' => $this->url, + 'description' => $this->description, + 'price' => $this->price, + 'image' => $this->image, + ]; + } +} diff --git a/app/Models/Category.php b/app/Models/Category.php index b5b1b1d..46943f1 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -5,6 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\HasMany; class Category extends Model { @@ -20,4 +21,9 @@ class Category extends Model { return $this->belongsTo(Company::class); } + + public function items(): HasMany + { + return $this->hasMany(Item::class); + } } diff --git a/app/Models/Item.php b/app/Models/Item.php new file mode 100644 index 0000000..0d9d84f --- /dev/null +++ b/app/Models/Item.php @@ -0,0 +1,26 @@ +belongsTo(Category::class); + } +} diff --git a/app/Policies/ItemPolicy.php b/app/Policies/ItemPolicy.php new file mode 100644 index 0000000..b31a7f2 --- /dev/null +++ b/app/Policies/ItemPolicy.php @@ -0,0 +1,66 @@ + + */ +class ItemFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + ]; + } +} diff --git a/database/migrations/2023_06_14_140000_create_items_table.php b/database/migrations/2023_06_14_140000_create_items_table.php new file mode 100644 index 0000000..8a6e685 --- /dev/null +++ b/database/migrations/2023_06_14_140000_create_items_table.php @@ -0,0 +1,38 @@ +id(); + $table->unsignedBiginteger('category_id')->unsigned(); + $table->string('uuid'); + $table->string('name'); + $table->string('url'); + $table->string('description'); + $table->decimal('price', 8, 2); + $table->string('image'); + + $table->foreign('category_id')->references('id') + ->on('categories')->onDelete('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('items'); + } +}; diff --git a/database/seeders/ItemSeeder.php b/database/seeders/ItemSeeder.php new file mode 100644 index 0000000..480643d --- /dev/null +++ b/database/seeders/ItemSeeder.php @@ -0,0 +1,17 @@ +