from sqlalchemy import select from sqlalchemy.orm import Session from models.family import Likes from schemas.like import LikeCreate from service.record_service import get_record_by_id def get_like(db: Session, record_id: int, user_id: int) -> Likes | None: result = db.execute( select(Likes).where(Likes.record_id == record_id, Likes.user_id == user_id) ) return result.scalar_one_or_none() def create_like(db: Session, like_dto: LikeCreate) -> bool: exist = get_like(db, like_dto.record_id, like_dto.user_id) if exist: return False like = Likes(**like_dto.model_dump()) db.add(like) record = get_record_by_id(db, like_dto.record_id) if record: record.like_count = (record.like_count or 0) + 1 db.commit() return True def delete_like(db: Session, record_id: int, user_id: int) -> bool: like = get_like(db, record_id, user_id) if not like: return False db.delete(like) record = get_record_by_id(db, record_id) if record and record.like_count and record.like_count > 0: record.like_count -= 1 db.commit() return True