06/15 Phase 3 codes
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
"""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))
|
||||
Reference in New Issue
Block a user