diff --git a/app/Http/Controllers/FoodController.php b/app/Http/Controllers/FoodController.php index 7c914cb..4f93ea6 100644 --- a/app/Http/Controllers/FoodController.php +++ b/app/Http/Controllers/FoodController.php @@ -86,13 +86,23 @@ class FoodController extends Controller } /** - * Remove the specified resource from storage. - * - * @param \App\Models\Food $food - * @return \Illuminate\Http\Response + * Confirm removal of specified resource. */ - public function destroy(Food $food) + public function delete(Food $food): View { - // + return view('foods.delete')->with('food', $food); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(Food $food): RedirectResponse + { + if ($food->foodAmounts()->count()) { + return back()->withErrors('Cannot delete: this food is used in recipes.'); + } + $food->delete(); + return redirect(route('foods.index')) + ->with('message', "Food {$food->name} deleted!"); } } diff --git a/app/Models/Food.php b/app/Models/Food.php index 65c96b6..ac957f2 100644 --- a/app/Models/Food.php +++ b/app/Models/Food.php @@ -6,6 +6,7 @@ use App\Models\Traits\Journalable; use App\Models\Traits\Sluggable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; /** * @mixin IdeHelperFood @@ -52,4 +53,11 @@ class Food extends Model 'serving_weight' => 'float', 'sodium' => 'float', ]; + + /** + * Get the food amounts using this food. + */ + public function foodAmounts(): HasMany { + return $this->hasMany(FoodAmount::class); + } } diff --git a/resources/views/foods/delete.blade.php b/resources/views/foods/delete.blade.php new file mode 100644 index 0000000..5375e0b --- /dev/null +++ b/resources/views/foods/delete.blade.php @@ -0,0 +1,43 @@ + + + + Delete {{ $food->name }}? + + + + + + @if ($errors->any()) + + @foreach ($errors->all() as $error) + + {{ $error }} + + @endforeach + + @endif + + + + @method('delete') + @csrf + + Are you sure what to delete {{ $food->name }}? + + Detail: + {{ $food->detail ?? 'None' }} + Brand: + {{ $food->brand ?? 'None' }} + + + + Yes, delete + + No, do not delete + + + + + + diff --git a/resources/views/foods/edit.blade.php b/resources/views/foods/edit.blade.php index 6485ced..c395047 100644 --- a/resources/views/foods/edit.blade.php +++ b/resources/views/foods/edit.blade.php @@ -1,7 +1,7 @@ - {{ ($food->exists ? 'Save' : 'Add') }} Food + {{ ($food->exists ? "Edit {$food->name}" : 'Add Food') }} @@ -25,14 +25,8 @@ - @if ($food->exists) - - @method('put') - @else - - @endif - - + + @if ($food->exists)@method('put')@endif @csrf @@ -131,6 +125,10 @@ {{ ($food->exists ? 'Save' : 'Add') }} + @if ($food->exists) + Delete + @endif diff --git a/resources/views/foods/index.blade.php b/resources/views/foods/index.blade.php index 55243d4..bdb7728 100644 --- a/resources/views/foods/index.blade.php +++ b/resources/views/foods/index.blade.php @@ -16,7 +16,14 @@ @foreach ($foods as $food) - + + + + + + + {{ $food->name }}@if($food->detail), {{ $food->detail }}@endif @@ -31,7 +38,7 @@ ({{ $food->serving_weight }}g) - Amount per serving + Amount per serving Calories {{$food->calories}} Fat @@ -45,12 +52,6 @@ Protein {{ $food->protein < 1 ? $food->protein * 1000 . "m" : $food->protein }}g - - edit - delete (TBD) - @endforeach diff --git a/routes/web.php b/routes/web.php index d678668..8496999 100644 --- a/routes/web.php +++ b/routes/web.php @@ -25,6 +25,9 @@ Route::get('/dashboard', function () { })->middleware(['auth'])->name('dashboard'); Route::resource('foods', FoodController::class)->middleware(['auth']); +Route::get('/foods/{food}/delete', [FoodController::class, 'delete']) + ->middleware(['auth']) + ->name('foods.delete'); Route::resource('recipes', RecipeController::class)->middleware(['auth']); Route::resource('journal-entries', JournalEntryController::class)->middleware(['auth']);