categories.index

This commit is contained in:
punkfairie 2025-02-20 21:25:58 -08:00
parent 1e3801bf6e
commit 9e3cb21848
Signed by: punkfairie
GPG key ID: B3C5488E9A1A7CA6
10 changed files with 202 additions and 5 deletions

View file

@ -0,0 +1,51 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\CategoryRequest;
use App\Models\Category;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class CategoryController extends Controller
{
use AuthorizesRequests;
public function index()
{
$this->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();
}
}

View file

@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CategoryRequest extends FormRequest
{
public function rules(): array
{
return [
'name' => ['required'],
];
}
public function authorize(): bool
{
return auth()->check();
}
}

View file

@ -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',

View file

@ -0,0 +1,47 @@
<?php
namespace App\Policies;
use App\Models\Category;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class CategoryPolicy
{
use HandlesAuthorization;
public function viewAny(User $user): bool
{
return true;
}
public function view(User $user, Category $category): bool
{
return true;
}
public function create(User $user): bool
{
return auth()->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();
}
}

View file

@ -0,0 +1,21 @@
<?php
namespace Database\Factories;
use App\Models\Category;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Carbon;
class CategoryFactory extends Factory
{
protected $model = Category::class;
public function definition(): array
{
return [
'name' => $this->faker->word(),
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
];
}
}

View file

@ -0,0 +1,23 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
$table->softDeletes();
});
}
public function down(): void
{
Schema::dropIfExists('categories');
}
};

View file

@ -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();
}
}

View file

@ -3,5 +3,7 @@
<h2>Admin</h2>
</x-slot>
<div>You're logged in!</div>
<p>You're logged in!</p>
<a href="{{ route('categories.index') }}">Categories</a>
</x-app-layout>

View file

@ -0,0 +1,22 @@
<x-app-layout>
<x-slot:title>Categories</x-slot>
<div class="sunken-panel">
<table>
<thead>
<tr>
<th>Category</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach ($categories as $category)
<tr>
<td>{{ $category->name }}</td>
<td></td>
</tr>
@endforeach
</tbody>
</table>
</div>
</x-app-layout>

View file

@ -1,5 +1,6 @@
<?php
use App\Http\Controllers\CategoryController;
use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;
@ -21,3 +22,7 @@
});
require __DIR__.'/auth.php';
Route::resources([
'categories' => CategoryController::class,
]);