AI掘金头条新闻系统 (Toutiao News)-检查新闻收藏状态
·
1. models/favorite.py
from datetime import datetime
from sqlalchemy import UniqueConstraint, Index, Integer, ForeignKey, DateTime
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from models.news import News
from models.users import User
class Base(DeclarativeBase):
pass
class Favorite(Base):
"""
收藏表ORM模型
"""
__tablename__ = 'favorite'
# 创建索引
# UniqueConstraint: 唯一约束, 当前用户,当前新闻,只能收藏一次
__table_args__ = (
UniqueConstraint('user_id', 'news_id', name='user_news_unique'),
Index('fk_favorite_user_idx', 'user_id'),
Index('fk_favorite_news_idx', 'news_id'),
)
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, comment="收藏ID")
user_id: Mapped[int] = mapped_column(Integer, ForeignKey(User.id), nullable=False, comment="用户ID")
news_id: Mapped[int] = mapped_column(Integer, ForeignKey(News.id), nullable=False, comment="新闻ID")
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, nullable=False, comment="收藏时间")
def __repr__(self):
return f"<Favorite(id={self.id}, user_id={self.user_id}, news_id={self.news_id}, created_at={self.created_at})>"
2. crud/favorite.py
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from models.favorite import Favorite
# 检查收藏状态:当前用户 是否 收藏了这一条新闻
async def is_news_favorite(
db: AsyncSession,
user_id: int,
news_id: int
):
query = select(Favorite).where(
Favorite.user_id == user_id,
Favorite.news_id == news_id
)
result = await db.execute(query)
# 是否有收藏记录
return result.scalar_one_or_none() is not None
3. schemas/favorite.py
from pydantic import BaseModel, Field
# 检查收藏状态
class FavoriteCheckResponse(BaseModel):
is_favorite: bool = Field(..., alias="isFavorite")
4. routers/favorite.py
from fastapi import APIRouter, Depends, Query
from sqlalchemy.ext.asyncio import AsyncSession
from config.db_confing import get_db
from models.users import User
from schemas.favorite import FavoriteCheckResponse
from utils.auth import get_current_user
from utils.response import success_response
from crud import favorite
router = APIRouter(prefix="/api/favorite", tags=["favorite"])
# 检查收藏状态
@router.get("/check")
async def check_favorite(
news_id: int = Query(..., alias="newsId"),
user: User = Depends(get_current_user),
db: AsyncSession = Depends(get_db)
):
is_favorited = await favorite.is_news_favorite(db, user.id, news_id)
return success_response(
message="检查收藏状态成功",
data=FavoriteCheckResponse(isFavorite=is_favorited)
)
5. main.py
# 挂载路由/注册路由
app.include_router(favorite.router)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)