diff --git a/app/Http/Controllers/Api/CategoryController.php b/app/Http/Controllers/Api/CategoryController.php new file mode 100644 index 00000000..e5256ddc --- /dev/null +++ b/app/Http/Controllers/Api/CategoryController.php @@ -0,0 +1,11 @@ + function ($query) { + $query->select('id', 'name'); + }]) + ->get(); + } + + public function show(Product $product) + { + $product->load('categories:id,name'); + + return $product; + } +} diff --git a/app/Http/Controllers/Api/UserController.php b/app/Http/Controllers/Api/UserController.php new file mode 100644 index 00000000..8dbb7f8b --- /dev/null +++ b/app/Http/Controllers/Api/UserController.php @@ -0,0 +1,11 @@ + $this->faker->numberBetween(1, 10), + 'transaction_id' => Str::random(16), + 'total' => $this->faker->numberBetween(50000, 200000), + ]; + } +} diff --git a/database/factories/ProductFactory.php b/database/factories/ProductFactory.php index 231576cc..edc2ddc8 100644 --- a/database/factories/ProductFactory.php +++ b/database/factories/ProductFactory.php @@ -30,7 +30,7 @@ public function definition() 'name' => $name, 'slug' => Str::slug($name), 'description' => $this->faker->realText(320), - 'price' => $this->faker->numberBetween(10000, 100000), + 'price' => $this->faker->numberBetween(100, 1000), ]; } } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 57b73b54..b8a8717a 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -13,6 +13,9 @@ class DatabaseSeeder extends Seeder */ public function run() { - // \App\Models\User::factory(10)->create(); + $this->call([ + UserSeeder::class, + ProductSeeder::class, + ]); } } diff --git a/database/seeders/OrderSeeder.php b/database/seeders/OrderSeeder.php new file mode 100644 index 00000000..a81bf550 --- /dev/null +++ b/database/seeders/OrderSeeder.php @@ -0,0 +1,21 @@ +times(10) + ->create(); + } +} diff --git a/database/seeders/ProductSeeder.php b/database/seeders/ProductSeeder.php new file mode 100644 index 00000000..ba70a696 --- /dev/null +++ b/database/seeders/ProductSeeder.php @@ -0,0 +1,46 @@ +times(20) + ->create(); + + Category::factory() + ->times(4) + ->create(); + + Order::factory() + ->times(10) + ->create(); + + $categories = Category::all(); + Product::all()->each(function ($product) use ($categories) { + $product->categories()->attach( + $categories->random(2)->pluck('id')->toArray() + ); + }); + + $orders = Order::all(); + Product::all()->each(function ($product) use ($orders) { + $orderIds = $orders->random(3)->pluck('id')->toArray(); + foreach ($orderIds as $orderId) { + $product->orders()->attach($orderId, ['quantity' => rand(1, 5)]); + } + }); + } +} diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php new file mode 100644 index 00000000..5c15a4e2 --- /dev/null +++ b/database/seeders/UserSeeder.php @@ -0,0 +1,21 @@ +times(10) + ->create(); + } +} diff --git a/routes/api.php b/routes/api.php index bcb8b189..764dd203 100644 --- a/routes/api.php +++ b/routes/api.php @@ -3,17 +3,14 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; -/* -|-------------------------------------------------------------------------- -| API Routes -|-------------------------------------------------------------------------- -| -| Here is where you can register API routes for your application. These -| routes are loaded by the RouteServiceProvider within a group which -| is assigned the "api" middleware group. Enjoy building your API! -| -*/ +use App\Http\Controllers\Api\CategoryController; +use App\Http\Controllers\Api\ProductController; +use App\Http\Controllers\Api\UserController; -Route::middleware('auth:api')->get('/user', function (Request $request) { - return $request->user(); -}); +Route::get('/categories', [CategoryController::class, 'index']); +Route::get('/categories/{category}', [CategoryController::class, 'show']); + +Route::get('/products', [ProductController::class, 'index']); +Route::get('/products/{product}', [ProductController::class, 'show']); + +Route::post('/purchase', [UserController::class, 'purchase']);