From a3bebf3976cfdfb1ad02971649be672789d9f775 Mon Sep 17 00:00:00 2001 From: punkfairie Date: Sun, 23 Feb 2025 13:13:47 -0800 Subject: [PATCH] programs --- app/Http/Controllers/ProgramController.php | 51 +++++++++++++++++++ app/Http/Requests/ProgramRequest.php | 23 +++++++++ app/Models/Category.php | 6 +++ app/Models/Program.php | 26 ++++++++++ app/Policies/ProgramPolicy.php | 41 +++++++++++++++ database/factories/ProgramFactory.php | 23 +++++++++ ...025_02_23_210155_create_programs_table.php | 27 ++++++++++ database/seeders/DatabaseSeeder.php | 6 +++ 8 files changed, 203 insertions(+) create mode 100644 app/Http/Controllers/ProgramController.php create mode 100644 app/Http/Requests/ProgramRequest.php create mode 100644 app/Models/Program.php create mode 100644 app/Policies/ProgramPolicy.php create mode 100644 database/factories/ProgramFactory.php create mode 100644 database/migrations/2025_02_23_210155_create_programs_table.php diff --git a/app/Http/Controllers/ProgramController.php b/app/Http/Controllers/ProgramController.php new file mode 100644 index 0000000..440c5df --- /dev/null +++ b/app/Http/Controllers/ProgramController.php @@ -0,0 +1,51 @@ +authorize('viewAny', Program::class); + + return Program::all(); + } + + public function store(ProgramRequest $request) + { + $this->authorize('create', Program::class); + + return Program::create($request->validated()); + } + + public function show(Program $program) + { + $this->authorize('view', $program); + + return $program; + } + + public function update(ProgramRequest $request, Program $program) + { + $this->authorize('update', $program); + + $program->update($request->validated()); + + return $program; + } + + public function destroy(Program $program) + { + $this->authorize('delete', $program); + + $program->delete(); + + return response()->json(); + } +} diff --git a/app/Http/Requests/ProgramRequest.php b/app/Http/Requests/ProgramRequest.php new file mode 100644 index 0000000..b4f7201 --- /dev/null +++ b/app/Http/Requests/ProgramRequest.php @@ -0,0 +1,23 @@ + ['required'], + 'category_id' => ['required', 'exists:categories'], + 'description' => ['nullable'], + 'website' => ['nullable'], + ]; + } + + public function authorize(): bool + { + return true; + } +} diff --git a/app/Models/Category.php b/app/Models/Category.php index 6d47b1c..89b2078 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; class Category extends Model @@ -13,4 +14,9 @@ class Category extends Model protected $fillable = [ 'name', ]; + + public function programs(): HasMany + { + return $this->hasMany(Program::class); + } } diff --git a/app/Models/Program.php b/app/Models/Program.php new file mode 100644 index 0000000..909d27e --- /dev/null +++ b/app/Models/Program.php @@ -0,0 +1,26 @@ +belongsTo(Category::class); + } +} diff --git a/app/Policies/ProgramPolicy.php b/app/Policies/ProgramPolicy.php new file mode 100644 index 0000000..1c9f76b --- /dev/null +++ b/app/Policies/ProgramPolicy.php @@ -0,0 +1,41 @@ + $this->faker->word(), + 'description' => $this->faker->text(), + 'website' => $this->faker->url(), + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]; + } +} diff --git a/database/migrations/2025_02_23_210155_create_programs_table.php b/database/migrations/2025_02_23_210155_create_programs_table.php new file mode 100644 index 0000000..c6a534b --- /dev/null +++ b/database/migrations/2025_02_23_210155_create_programs_table.php @@ -0,0 +1,27 @@ +id(); + $table->string('name'); + $table->foreignIdFor(Category::class)->constrained('categories'); + $table->text('description')->nullable(); + $table->string('website')->nullable(); + $table->timestamps(); + $table->softDeletes(); + }); + } + + public function down(): void + { + Schema::dropIfExists('programs'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 457bb4a..144dd36 100755 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -3,6 +3,7 @@ namespace Database\Seeders; use App\Models\Category; +use App\Models\Program; use App\Models\User; use Illuminate\Database\Seeder; @@ -24,5 +25,10 @@ public function run(): void ]); Category::factory(20)->create(); + Category::factory(10)->trashed()->create(); + + $categories = Category::all(); + Program::factory(40)->recycle($categories)->create(); + Program::factory(20)->recycle($categories)->trashed()->create(); } }