Как определить лайкнул ли текущий пользователь статью?

Вопрос по FastAPI, Pydantic и SQLAlchemy

Имеется модель статьи:
class Article(Base):
    title = Column(String(length=255), nullable=False)
    # etc


Также есть модель для хранения реакций на статью:
class ArticleReaction(Base):
    class Type(str, enum.Enum):
        LIKE = 'LIKE'
        DISLIKE = 'DISLIKE'

    id = Column(Integer, primary_key=True)
    article_id = Column(Integer, ForeignKey('article.id'), nullable=False)
    user_id = Column(Integer, ForeignKey('user.id'), nullable=False)
    type = Column(Enum(Type), nullable=False)


Определил endpoint для лайкания/дизлайкания конкретной статьи:

@router.post('/articles/{slug}/reactions/', response_model=schemas.ArticleReaction)
def react(
    *,
    db: Session = Depends(dependencies.get_db),
    user: models.User = Depends(oauth2.get_user),
    slug: str,
    schema: schemas.ArticleReactionUpdate,
):
    article: models.Article = crud.article.retrieve(db, slug=slug)

    if not article:
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND)

    reaction = db.query(ArticleReaction).(article_id=article.id, user_id=user.id)

    # если уже стоит реакция, то удаляем ее
        if reaction is not None:
            db.delete(reaction)
            db.commit()

            # если стоявшая реакция была как прилетевшая, то ничего дальше не делаем
            if reaction.type == type:
                return Response(status_code=status.HTTP_200_OK)

        # если же прислали новую реакцию, создаем запись с новым типом реакции
        reaction = ArticleReaction(
            article_id=article.id,
            user_id=user.id,
            type=schema.type,
        )
        db.add(reaction)
        db.commit()
        db.refresh(reaction)

        return reaction


Pydantic модели для ArticleReaction:

class ArticleReactionBase(BaseModel):
    article_id: int
    user_id: int
    type: ArticleReaction.Type

class ArticleReactionCreate(ArticleReactionBase):
    pass

class ArticleReactionUpdate(BaseModel):
    type: ArticleReaction.Type

class ArticleReaction(ArticleReactionBase):
    class Config:
        orm_mode = True


Вопрос:
Когда на фронте я вывожу список карточек статьей, я хочу подсветить текущую реакцию пользователя на каждую статью.
Как в ленте в ВК мы видим, лайкнули мы пост или нет.
Как мне это сделать? Как узнать текущую реакцию пользователя на каждую статью?
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы