From ccee91fdc48b2fec151b0b92bb8bdd6efa89e2f5 Mon Sep 17 00:00:00 2001 From: shahrzad011 Date: Thu, 20 Aug 2026 08:15:42 +0330 Subject: [PATCH] feat: add user favorites management --- .../Account/FavoriteController.php | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 app/Http/Controllers/Account/FavoriteController.php diff --git a/app/Http/Controllers/Account/FavoriteController.php b/app/Http/Controllers/Account/FavoriteController.php new file mode 100644 index 0000000..9094841 --- /dev/null +++ b/app/Http/Controllers/Account/FavoriteController.php @@ -0,0 +1,76 @@ +where('user_id', Auth::id())->get()); + + $user = Auth::user(); + + $favorites = Favorite::with('favoritable') // لود پلیمورفیک + ->where('user_id', $user->id) + ->orderByDesc('id') + ->paginate(9); + + return view('account.favorites', compact('favorites')); + } + + /** + * افزودن/حذف به صورت toggle (اگر موجود بود حذف کن، اگر نبود بساز). + * این متد با پلیمورفیک بودن Favorite از هر دو مدل تور و پرواز پشتیبانی میکنه. + */ + public function toggle(Request $request) + { + // چک اینکه کاربر ورود شدهست + if (!Auth::check()) { + return back()->with('error', 'برای افزودن به علاقهمندی باید ورود شوی'); + } + + $data = $request->validate([ + 'favoritable_type' => 'required|string', + 'favoritable_id' => 'required|integer', + ]); + + $type = $data['favoritable_type']; + $id = $data['favoritable_id']; + + // بررسی اینکه مدل درخواستی واقعاً وجود داره (مثلاً Tour یا Flight) + if (!class_exists($type)) { + return back()->with('error', 'مدل معتبر نیست'); + } + + $model = $type::find($id); + + if (!$model) { + return back()->with('error', 'مورد یافت نشد'); + } + + // یافتن علاقهمندی موجود + $favorite = Favorite::where('user_id', Auth::id()) + ->where('favoritable_type', $type) + ->where('favoritable_id', $id) + ->first(); + + if ($favorite) { + $favorite->delete(); // حذف از علاقهمندیها + $message = 'از علاقهمندیها حذف شد'; + } else { + Favorite::create([ + 'user_id' => Auth::id(), + 'favoritable_type' => $type, + 'favoritable_id' => $id, + ]); + $message = 'به علاقهمندیها افزوده شد'; + } + + return back()->with('success', $message); + } +}