diff --git a/app/Domain/Categories/Models/Category.php b/app/Domain/Categories/Models/Category.php new file mode 100644 index 0000000..e0c2fd4 --- /dev/null +++ b/app/Domain/Categories/Models/Category.php @@ -0,0 +1,20 @@ +belongsTo(File::class); + } +} diff --git a/app/Domain/Files/Actions/StoreFileAction.php b/app/Domain/Files/Actions/StoreFileAction.php new file mode 100644 index 0000000..3004b49 --- /dev/null +++ b/app/Domain/Files/Actions/StoreFileAction.php @@ -0,0 +1,32 @@ +fit(300) + ->encode(); + + $path = $file->hashName(path: 'categories'); + + Storage::disk( + app()->environment('local') + ? 'public' + : config('filesystems.default') + )->put($path, $img, 'public'); + + return File::create([ + 'path' => app()->environment('local') + ? $path + : Storage::url($path) + ]); + } +} diff --git a/app/Http/Controllers/Categories/CreateCategoryController.php b/app/Http/Controllers/Categories/CreateCategoryController.php new file mode 100644 index 0000000..bc88ee2 --- /dev/null +++ b/app/Http/Controllers/Categories/CreateCategoryController.php @@ -0,0 +1,14 @@ +delete(); + + return redirect()->back()->with('success', 'Successfully deleted category!'); + } +} diff --git a/app/Http/Controllers/Categories/EditCategoryController.php b/app/Http/Controllers/Categories/EditCategoryController.php new file mode 100644 index 0000000..da1f372 --- /dev/null +++ b/app/Http/Controllers/Categories/EditCategoryController.php @@ -0,0 +1,17 @@ + $category->load('file') + ]); + } +} diff --git a/app/Http/Controllers/Categories/IndexCategoryController.php b/app/Http/Controllers/Categories/IndexCategoryController.php new file mode 100644 index 0000000..160ff59 --- /dev/null +++ b/app/Http/Controllers/Categories/IndexCategoryController.php @@ -0,0 +1,17 @@ + Category::with('file')->get() + ]); + } +} diff --git a/app/Http/Controllers/Categories/StoreCategoryController.php b/app/Http/Controllers/Categories/StoreCategoryController.php new file mode 100644 index 0000000..01583fd --- /dev/null +++ b/app/Http/Controllers/Categories/StoreCategoryController.php @@ -0,0 +1,31 @@ + $request->input('name'), + 'description' => $request->input('description'), + ]); + + if ($request->file('file')) { + $file = $storeFileAction($request->file('file')); + + $category->update([ + 'file_id' => $file->id + ]); + } + + return redirect()->back()->with('success', 'Successfully created new category!'); + } +} diff --git a/app/Http/Controllers/Categories/UpdateCategoryController.php b/app/Http/Controllers/Categories/UpdateCategoryController.php new file mode 100644 index 0000000..044b772 --- /dev/null +++ b/app/Http/Controllers/Categories/UpdateCategoryController.php @@ -0,0 +1,32 @@ +update([ + 'name' => $request->input('name'), + 'description' => $request->input('description'), + ]); + + if ($request->file('file')) { + $file = $storeFileAction($request->file('file')); + + $category->update([ + 'file_id' => $file->id + ]); + } + + return redirect()->back()->with('success', 'Successfully updated category!'); + } +} diff --git a/app/Http/Requests/Categories/StoreCategoryRequest.php b/app/Http/Requests/Categories/StoreCategoryRequest.php new file mode 100644 index 0000000..903f0fe --- /dev/null +++ b/app/Http/Requests/Categories/StoreCategoryRequest.php @@ -0,0 +1,22 @@ + ['required'], + 'description' => ['nullable'], + 'file' => ['required', 'image'] + ]; + } +} diff --git a/app/Http/Requests/Categories/UpdateCategoryRequest.php b/app/Http/Requests/Categories/UpdateCategoryRequest.php new file mode 100644 index 0000000..f9e5e18 --- /dev/null +++ b/app/Http/Requests/Categories/UpdateCategoryRequest.php @@ -0,0 +1,22 @@ + ['required'], + 'description' => ['nullable'], + 'file' => ['nullable', 'image'] + ]; + } +} diff --git a/database/factories/Domain/Categories/Models/CategoryFactory.php b/database/factories/Domain/Categories/Models/CategoryFactory.php new file mode 100644 index 0000000..5701a66 --- /dev/null +++ b/database/factories/Domain/Categories/Models/CategoryFactory.php @@ -0,0 +1,19 @@ + fake()->name(), + 'description' => fake()->words(6, true), + ]; + } +} diff --git a/database/migrations/2023_11_28_031044_create_categories_table.php b/database/migrations/2023_11_28_031044_create_categories_table.php new file mode 100644 index 0000000..ffdd3d4 --- /dev/null +++ b/database/migrations/2023_11_28_031044_create_categories_table.php @@ -0,0 +1,21 @@ +id(); + $table->foreignId('file_id')->nullable(); + $table->string('name'); + $table->string('description'); + $table->timestamps(); + }); + } +}; diff --git a/resources/js/Components/Button/DangerButton.vue b/resources/js/Components/Button/DangerButton.vue index cb2a73a..e7b7be6 100644 --- a/resources/js/Components/Button/DangerButton.vue +++ b/resources/js/Components/Button/DangerButton.vue @@ -1,6 +1,21 @@ +