diff --git a/Modules/Products/Config/config.php b/Modules/Products/Config/config.php new file mode 100644 index 0000000..3bfe783 --- /dev/null +++ b/Modules/Products/Config/config.php @@ -0,0 +1,3 @@ + 'Products']; diff --git a/Modules/Products/Database/Migrations/2026_07_24_105054_create_products_table.php b/Modules/Products/Database/Migrations/2026_07_24_105054_create_products_table.php new file mode 100644 index 0000000..1d27a88 --- /dev/null +++ b/Modules/Products/Database/Migrations/2026_07_24_105054_create_products_table.php @@ -0,0 +1,10 @@ +id(); $table->string('name'); $table->boolean('is_active')->default(true); $table->timestamps(); }); } + public function down(): void { Schema::dropIfExists('products'); } +}; diff --git a/Modules/Products/Http/Controllers/ProductController.php b/Modules/Products/Http/Controllers/ProductController.php new file mode 100644 index 0000000..dd70055 --- /dev/null +++ b/Modules/Products/Http/Controllers/ProductController.php @@ -0,0 +1,22 @@ + Product::query()->latest()->paginate()]); + } + + public function store(StoreProductRequest $request): RedirectResponse + { + Product::query()->create($request->validated()); + return back()->with('status', 'Product created.'); + } +} diff --git a/Modules/Products/Http/Requests/StoreProductRequest.php b/Modules/Products/Http/Requests/StoreProductRequest.php new file mode 100644 index 0000000..ba5e5dc --- /dev/null +++ b/Modules/Products/Http/Requests/StoreProductRequest.php @@ -0,0 +1,11 @@ +user() !== null; } + public function rules(): array { return ['name' => ['required', 'string', 'max:255'], 'is_active' => ['sometimes', 'boolean']]; } +} diff --git a/Modules/Products/Models/Product.php b/Modules/Products/Models/Product.php new file mode 100644 index 0000000..13d567e --- /dev/null +++ b/Modules/Products/Models/Product.php @@ -0,0 +1,15 @@ + 'boolean']; + } +} diff --git a/Modules/Products/Providers/ProductsServiceProvider.php b/Modules/Products/Providers/ProductsServiceProvider.php new file mode 100644 index 0000000..98d5e46 --- /dev/null +++ b/Modules/Products/Providers/ProductsServiceProvider.php @@ -0,0 +1,20 @@ +app->register(RouteServiceProvider::class); + $this->mergeConfigFrom(module_path('Products', 'Config/config.php'), 'products'); + } + + public function boot(): void + { + $this->loadMigrationsFrom(module_path('Products', 'Database/Migrations')); + $this->loadViewsFrom(module_path('Products', 'Resources/views'), 'products'); + } +} diff --git a/Modules/Products/Providers/RouteServiceProvider.php b/Modules/Products/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..337a787 --- /dev/null +++ b/Modules/Products/Providers/RouteServiceProvider.php @@ -0,0 +1,14 @@ +group(module_path('Products', 'Routes/web.php')); + } +} diff --git a/Modules/Products/Resources/views/admin/products/form.blade.php b/Modules/Products/Resources/views/admin/products/form.blade.php new file mode 100644 index 0000000..2e0b179 --- /dev/null +++ b/Modules/Products/Resources/views/admin/products/form.blade.php @@ -0,0 +1 @@ +
diff --git a/Modules/Products/Resources/views/admin/products/index.blade.php b/Modules/Products/Resources/views/admin/products/index.blade.php new file mode 100644 index 0000000..b57a1db --- /dev/null +++ b/Modules/Products/Resources/views/admin/products/index.blade.php @@ -0,0 +1,3 @@ +