diff --git a/app/Http/Controllers/FavoriteController.php b/app/Http/Controllers/FavoriteController.php index 0f3076d..879055e 100644 --- a/app/Http/Controllers/FavoriteController.php +++ b/app/Http/Controllers/FavoriteController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Models\Exercise; use App\Models\Workout; +use App\Models\YogaPose; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Facades\Auth; @@ -39,4 +40,18 @@ class FavoriteController extends Controller } return back()->with('status', $msg); } + + public function toggleYogaPose(YogaPose $pose): RedirectResponse + { + $user = Auth::user(); + $exists = $user->favoriteYogaPoses()->where('yoga_pose_id', $pose->id)->exists(); + if ($exists) { + $user->favoriteYogaPoses()->detach($pose->id); + $msg = 'Removed from favorites'; + } else { + $user->favoriteYogaPoses()->attach($pose->id); + $msg = 'Added to favorites'; + } + return back()->with('status', $msg); + } } diff --git a/app/Models/User.php b/app/Models/User.php index 254663c..e82ca67 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -79,6 +79,11 @@ class User extends Authenticatable return $this->belongsToMany(Workout::class, 'workout_favorites')->withTimestamps(); } + public function favoriteYogaPoses() + { + return $this->belongsToMany(YogaPose::class, 'yoga_pose_favorites')->withTimestamps(); + } + // Helpers public function hasFavoritedExercise(Exercise $exercise): bool { @@ -89,4 +94,9 @@ class User extends Authenticatable { return $this->favoriteWorkouts()->where('workout_id', $workout->id)->exists(); } + + public function hasFavoritedYogaPose(YogaPose $pose): bool + { + return $this->favoriteYogaPoses()->where('yoga_pose_id', $pose->id)->exists(); + } } diff --git a/database/migrations/2026_08_10_090234_create_yoga_pose_favorites_table.php b/database/migrations/2026_08_10_090234_create_yoga_pose_favorites_table.php new file mode 100644 index 0000000..ecbc8c2 --- /dev/null +++ b/database/migrations/2026_08_10_090234_create_yoga_pose_favorites_table.php @@ -0,0 +1,30 @@ +id(); + $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + $table->foreignId('yoga_pose_id')->constrained('yoga_poses')->cascadeOnDelete(); + $table->timestamps(); + $table->unique(['user_id', 'yoga_pose_id']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('yoga_pose_favorites'); + } +}; diff --git a/resources/views/yoga/show.blade.php b/resources/views/yoga/show.blade.php index b182292..524f801 100644 --- a/resources/views/yoga/show.blade.php +++ b/resources/views/yoga/show.blade.php @@ -13,6 +13,22 @@ ← {{ __('app.yoga.back') }}