47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
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
|