From 8cef5db6b37f6c08e41ef8052144576fd62d08d9 Mon Sep 17 00:00:00 2001 From: Mark Gregory Date: Fri, 24 Jul 2026 11:53:07 +0100 Subject: [PATCH] phases 8 --- Modules/Products/Config/config.php | 3 +++ ...026_07_24_105054_create_products_table.php | 10 +++++++++ .../Http/Controllers/ProductController.php | 22 +++++++++++++++++++ .../Http/Requests/StoreProductRequest.php | 11 ++++++++++ Modules/Products/Models/Product.php | 15 +++++++++++++ .../Providers/ProductsServiceProvider.php | 20 +++++++++++++++++ .../Providers/RouteServiceProvider.php | 14 ++++++++++++ .../views/admin/products/form.blade.php | 1 + .../views/admin/products/index.blade.php | 3 +++ Modules/Products/Routes/web.php | 7 ++++++ .../Tests/Feature/ProductCrudTest.php | 5 +++++ .../Tests/Feature/ProductsModuleBootTest.php | 5 +++++ Modules/Products/module.json | 19 ++++++++++++++++ resources/themes/corporate/README.md | 3 +++ .../themes/corporate/assets/css/theme.css | 1 + resources/themes/corporate/theme.json | 6 +++++ .../themes/corporate/views/home.blade.php | 1 + .../corporate/views/layouts/app.blade.php | 1 + 18 files changed, 147 insertions(+) create mode 100644 Modules/Products/Config/config.php create mode 100644 Modules/Products/Database/Migrations/2026_07_24_105054_create_products_table.php create mode 100644 Modules/Products/Http/Controllers/ProductController.php create mode 100644 Modules/Products/Http/Requests/StoreProductRequest.php create mode 100644 Modules/Products/Models/Product.php create mode 100644 Modules/Products/Providers/ProductsServiceProvider.php create mode 100644 Modules/Products/Providers/RouteServiceProvider.php create mode 100644 Modules/Products/Resources/views/admin/products/form.blade.php create mode 100644 Modules/Products/Resources/views/admin/products/index.blade.php create mode 100644 Modules/Products/Routes/web.php create mode 100644 Modules/Products/Tests/Feature/ProductCrudTest.php create mode 100644 Modules/Products/Tests/Feature/ProductsModuleBootTest.php create mode 100644 Modules/Products/module.json create mode 100644 resources/themes/corporate/README.md create mode 100644 resources/themes/corporate/assets/css/theme.css create mode 100644 resources/themes/corporate/theme.json create mode 100644 resources/themes/corporate/views/home.blade.php create mode 100644 resources/themes/corporate/views/layouts/app.blade.php 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 @@ +
@csrf{{ __('Save Product') }} 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 @@ + +

Product

@foreach ($records as $record)
{{ $record->name }}
@endforeach{{ $records->links() }}
+
diff --git a/Modules/Products/Routes/web.php b/Modules/Products/Routes/web.php new file mode 100644 index 0000000..eecbc02 --- /dev/null +++ b/Modules/Products/Routes/web.php @@ -0,0 +1,7 @@ +prefix('administration/products')->name('administration.products.')->group(function (): void { + // Register module routes here. +}); diff --git a/Modules/Products/Tests/Feature/ProductCrudTest.php b/Modules/Products/Tests/Feature/ProductCrudTest.php new file mode 100644 index 0000000..523eb1d --- /dev/null +++ b/Modules/Products/Tests/Feature/ProductCrudTest.php @@ -0,0 +1,5 @@ +create(['name' => 'Example']))->toBeInstanceOf(Product::class); }); diff --git a/Modules/Products/Tests/Feature/ProductsModuleBootTest.php b/Modules/Products/Tests/Feature/ProductsModuleBootTest.php new file mode 100644 index 0000000..57b18f9 --- /dev/null +++ b/Modules/Products/Tests/Feature/ProductsModuleBootTest.php @@ -0,0 +1,5 @@ +providerIsLoaded(Modules\Products\Providers\ProductsServiceProvider::class))->toBeTrue(); +}); diff --git a/Modules/Products/module.json b/Modules/Products/module.json new file mode 100644 index 0000000..5473559 --- /dev/null +++ b/Modules/Products/module.json @@ -0,0 +1,19 @@ +{ + "name": "Products", + "alias": "products", + "version": "1.0.0", + "description": "Products module.", + "keywords": [ + "products" + ], + "priority": 100, + "providers": [ + "Modules\\Products\\Providers\\ProductsServiceProvider" + ], + "aliases": {}, + "files": [], + "requires": [ + "Core", + "Administration" + ] +} diff --git a/resources/themes/corporate/README.md b/resources/themes/corporate/README.md new file mode 100644 index 0000000..4dd262b --- /dev/null +++ b/resources/themes/corporate/README.md @@ -0,0 +1,3 @@ +# Corporate Theme + +Generated by `php artisan theme:make corporate`. diff --git a/resources/themes/corporate/assets/css/theme.css b/resources/themes/corporate/assets/css/theme.css new file mode 100644 index 0000000..7897063 --- /dev/null +++ b/resources/themes/corporate/assets/css/theme.css @@ -0,0 +1 @@ +:root { --theme-radius: 0.5rem; } diff --git a/resources/themes/corporate/theme.json b/resources/themes/corporate/theme.json new file mode 100644 index 0000000..ac2b44a --- /dev/null +++ b/resources/themes/corporate/theme.json @@ -0,0 +1,6 @@ +{ + "name": "Corporate", + "slug": "corporate", + "version": "1.0.0", + "parent": "common" +} diff --git a/resources/themes/corporate/views/home.blade.php b/resources/themes/corporate/views/home.blade.php new file mode 100644 index 0000000..de7095f --- /dev/null +++ b/resources/themes/corporate/views/home.blade.php @@ -0,0 +1 @@ +

{{ config('app.name') }}

diff --git a/resources/themes/corporate/views/layouts/app.blade.php b/resources/themes/corporate/views/layouts/app.blade.php new file mode 100644 index 0000000..39b824d --- /dev/null +++ b/resources/themes/corporate/views/layouts/app.blade.php @@ -0,0 +1 @@ +{{ $title ?? config('app.name') }}@vite(['resources/css/app.css', 'resources/js/app.js']){{ $slot }}