""" 内容管理模型 """ from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, func from sqlalchemy.orm import relationship from app.database import Base class Article(Base): """内容文章""" __tablename__ = "articles" id = Column(Integer, primary_key=True, index=True) title = Column(String(200), nullable=False, comment="标题") slug = Column(String(200), unique=True, nullable=False, comment="URL友好的标识") content = Column(Text, nullable=False, comment="正文") content_type = Column(String(10), default="markdown", comment="内容类型:markdown/html") summary = Column(String(500), comment="摘要") cover_image = Column(String(500), comment="封面图路径") column_id = Column(Integer, ForeignKey("columns.id"), nullable=False, comment="所属栏目ID") author = Column(String(50), comment="作者") source_url = Column(String(1000), nullable=True, comment="来源URL(公众号等采集来源,用于去重)") status = Column(String(20), default="draft", comment="状态:published/draft") sort_order = Column(Integer, default=0, comment="排序权重") view_count = Column(Integer, default=0, comment="浏览次数") created_at = Column(DateTime, server_default=func.now(), comment="创建时间") updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment="更新时间") # 关联 column = relationship("ColumnModel", backref="articles") def to_dict(self, include_content: bool = False): """转换为字典""" data = { "id": self.id, "title": self.title, "slug": self.slug, "summary": self.summary, "cover_image": self.cover_image, "column_id": self.column_id, "column": self.column.to_dict() if self.column else None, "content_type": self.content_type, "author": self.author, "status": self.status, "sort_order": self.sort_order, "view_count": self.view_count, "created_at": self.created_at.isoformat() if self.created_at else None, "updated_at": self.updated_at.isoformat() if self.updated_at else None, } if include_content: data["content"] = self.content return data