From 9e3cb218483cf1cd16c2309aa221489dd1241dfe Mon Sep 17 00:00:00 2001 From: punkfairie Date: Thu, 20 Feb 2025 21:25:58 -0800 Subject: [PATCH] categories.index --- app/Http/Controllers/CategoryController.php | 51 +++++++++++++++++++ app/Http/Requests/CategoryRequest.php | 20 ++++++++ app/Models/Category.php | 3 +- app/Policies/CategoryPolicy.php | 47 +++++++++++++++++ database/factories/CategoryFactory.php | 21 ++++++++ ...5_02_21_041740_create_categories_table.php | 23 +++++++++ database/seeders/DatabaseSeeder.php | 11 ++-- resources/views/admin.blade.php | 4 +- resources/views/categories/index.blade.php | 22 ++++++++ routes/web.php | 5 ++ 10 files changed, 202 insertions(+), 5 deletions(-) create mode 100644 app/Http/Controllers/CategoryController.php create mode 100644 app/Http/Requests/CategoryRequest.php create mode 100644 app/Policies/CategoryPolicy.php create mode 100644 database/factories/CategoryFactory.php create mode 100644 database/migrations/2025_02_21_041740_create_categories_table.php create mode 100644 resources/views/categories/index.blade.php diff --git a/app/Http/Controllers/CategoryController.php b/app/Http/Controllers/CategoryController.php new file mode 100644 index 0000000..16b76fd --- /dev/null +++ b/app/Http/Controllers/CategoryController.php @@ -0,0 +1,51 @@ +authorize('viewAny', Category::class); + + return view('categories.index')->with(['categories' => Category::all()]); + } + + public function store(CategoryRequest $request) + { + $this->authorize('create', Category::class); + + return Category::create($request->validated()); + } + + public function show(Category $category) + { + $this->authorize('view', $category); + + return $category; + } + + public function update(CategoryRequest $request, Category $category) + { + $this->authorize('update', $category); + + $category->update($request->validated()); + + return $category; + } + + public function destroy(Category $category) + { + $this->authorize('delete', $category); + + $category->delete(); + + return response()->json(); + } +} diff --git a/app/Http/Requests/CategoryRequest.php b/app/Http/Requests/CategoryRequest.php new file mode 100644 index 0000000..d78bd68 --- /dev/null +++ b/app/Http/Requests/CategoryRequest.php @@ -0,0 +1,20 @@ + ['required'], + ]; + } + + public function authorize(): bool + { + return auth()->check(); + } +} diff --git a/app/Models/Category.php b/app/Models/Category.php index 3dd9712..6d47b1c 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -4,10 +4,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\SoftDeletes; class Category extends Model { - use HasFactory; + use HasFactory, SoftDeletes; protected $fillable = [ 'name', diff --git a/app/Policies/CategoryPolicy.php b/app/Policies/CategoryPolicy.php new file mode 100644 index 0000000..feeb5ef --- /dev/null +++ b/app/Policies/CategoryPolicy.php @@ -0,0 +1,47 @@ +check(); + } + + public function update(User $user, Category $category): bool + { + return auth()->check(); + } + + public function delete(User $user, Category $category): bool + { + return auth()->check(); + } + + public function restore(User $user, Category $category): bool + { + return auth()->check(); + } + + public function forceDelete(User $user, Category $category): bool + { + return auth()->check(); + } +} diff --git a/database/factories/CategoryFactory.php b/database/factories/CategoryFactory.php new file mode 100644 index 0000000..0d7ba38 --- /dev/null +++ b/database/factories/CategoryFactory.php @@ -0,0 +1,21 @@ + $this->faker->word(), + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]; + } +} diff --git a/database/migrations/2025_02_21_041740_create_categories_table.php b/database/migrations/2025_02_21_041740_create_categories_table.php new file mode 100644 index 0000000..23dba50 --- /dev/null +++ b/database/migrations/2025_02_21_041740_create_categories_table.php @@ -0,0 +1,23 @@ +id(); + $table->string('name'); + $table->timestamps(); + $table->softDeletes(); + }); + } + + public function down(): void + { + Schema::dropIfExists('categories'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index d01a0ef..457bb4a 100755 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,10 +2,12 @@ namespace Database\Seeders; +use App\Models\Category; use App\Models\User; -// use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; +// use Illuminate\Database\Console\Seeds\WithoutModelEvents; + class DatabaseSeeder extends Seeder { /** @@ -16,8 +18,11 @@ public function run(): void // User::factory(10)->create(); User::factory()->create([ - 'name' => 'Test User', - 'email' => 'test@example.com', + 'name' => 'Marley', + 'email' => 'e@m.ail', + 'password' => 'password', ]); + + Category::factory(20)->create(); } } diff --git a/resources/views/admin.blade.php b/resources/views/admin.blade.php index f655f46..a3bb9e1 100644 --- a/resources/views/admin.blade.php +++ b/resources/views/admin.blade.php @@ -3,5 +3,7 @@

Admin

-
You're logged in!
+

You're logged in!

+ + Categories diff --git a/resources/views/categories/index.blade.php b/resources/views/categories/index.blade.php new file mode 100644 index 0000000..94a9c2f --- /dev/null +++ b/resources/views/categories/index.blade.php @@ -0,0 +1,22 @@ + + Categories + +
+ + + + + + + + + @foreach ($categories as $category) + + + + + @endforeach + +
CategoryActions
{{ $category->name }}
+
+
diff --git a/routes/web.php b/routes/web.php index 08c7593..c59939c 100755 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,6 @@ CategoryController::class, +]);