from sqlalchemy import Column, Integer, String, Text, Boolean, DateTime, ForeignKey, Date from sqlalchemy.orm import relationship from app.database import Base from app.utils.datetime import utcnow class AnniversaryCategory(Base): """纪念日分类模型""" __tablename__ = "anniversary_categories" id = Column(Integer, primary_key=True, index=True) name = Column(String(50), nullable=False) icon = Column(String(50), default="calendar") color = Column(String(20), default="#FFB7C5") sort_order = Column(Integer, default=0) # 关联关系 anniversaries = relationship("Anniversary", back_populates="category") class Anniversary(Base): """纪念日模型""" __tablename__ = "anniversaries" id = Column(Integer, primary_key=True, index=True) title = Column(String(200), nullable=False) date = Column(Date, nullable=False) # 月-日,年份部分可选 year = Column(Integer, nullable=True) # 年份,用于计算第 N 个周年 category_id = Column(Integer, ForeignKey("anniversary_categories.id"), nullable=True) description = Column(Text, nullable=True) is_recurring = Column(Boolean, default=True) remind_days_before = Column(Integer, default=3) created_at = Column(DateTime, default=utcnow) updated_at = Column(DateTime, default=utcnow, onupdate=utcnow) # 关联关系 category = relationship("AnniversaryCategory", back_populates="anniversaries")