import uuid as _uuid from sqlalchemy import Column, Integer, String, Text, Date, Boolean, DateTime, ForeignKey from sqlalchemy.orm import relationship from app.database import Base from app.utils.datetime import utcnow class CertificateCategory(Base): """证书分类模型""" __tablename__ = "certificate_categories" id = Column(Integer, primary_key=True, index=True) uuid = Column(String(36), default=lambda: str(_uuid.uuid4()), unique=True, index=True) name = Column(String(50), nullable=False) icon = Column(String(50), default="medal") color = Column(String(20), default="#FFB7C5") sort_order = Column(Integer, default=0) is_deleted = Column(Boolean, default=False) sync_version = Column(Integer, default=1) certificates = relationship("Certificate", back_populates="category") class Certificate(Base): """证书模型""" __tablename__ = "certificates" id = Column(Integer, primary_key=True, index=True) uuid = Column(String(36), default=lambda: str(_uuid.uuid4()), unique=True, index=True) title = Column(String(200), nullable=False) category_id = Column(Integer, ForeignKey("certificate_categories.id"), nullable=True) image = Column(Text, nullable=True) # base64 data URL issuer = Column(String(200), nullable=True) # 来源/颁发机构 issue_date = Column(Date, nullable=True) expiry_date = Column(Date, nullable=True) # null = 永久有效 description = Column(Text, nullable=True) sort_order = Column(Integer, default=0) is_deleted = Column(Boolean, default=False) sync_version = Column(Integer, default=1) created_at = Column(DateTime, default=utcnow) updated_at = Column(DateTime, default=utcnow, onupdate=utcnow) category = relationship("CertificateCategory", back_populates="certificates")