"""Favorites: toggle save/unsave, check status, list.""" from sqlalchemy.exc import IntegrityError from app.extensions import db from app.models.favorite import Favorite def is_favorited(user_id: int, listing_id: int) -> bool: return Favorite.query.filter_by( user_id=user_id, listing_id=listing_id).first() is not None def toggle_favorite(user_id: int, listing_id: int) -> bool: """Add if not present; remove if present. Returns True if now favorited.""" existing = Favorite.query.filter_by( user_id=user_id, listing_id=listing_id).first() if existing: db.session.delete(existing) db.session.commit() return False fav = Favorite(user_id=user_id, listing_id=listing_id) db.session.add(fav) try: db.session.commit() except IntegrityError: db.session.rollback() return True def user_favorites(user_id: int, page=1, per_page=20): return (Favorite.query .filter_by(user_id=user_id) .order_by(Favorite.created_at.desc()) .paginate(page=page, per_page=per_page, error_out=False))