from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Enum from sqlalchemy.sql import func from sqlalchemy.orm import relationship from app.db.database import Base import enum class TryonStatus(enum.Enum): """试穿状态枚举""" GENERATING = "生成中" COMPLETED = "已生成" FAILED = "失败" class TryonHistory(Base): """试穿记录数据模型""" __tablename__ = "tryon_history" id = Column(Integer, primary_key=True, autoincrement=True, index=True) user_id = Column(Integer, ForeignKey("users.id"), nullable=False, index=True, comment="用户ID") person_image_id = Column(Integer, ForeignKey("person_images.id"), nullable=False, index=True, comment="人物形象ID") top_clothing_id = Column(Integer, ForeignKey("clothing.id"), nullable=True, comment="上衣ID") bottom_clothing_id = Column(Integer, ForeignKey("clothing.id"), nullable=True, comment="下装ID") top_clothing_url = Column(String(500), nullable=True, comment="上衣图片URL") bottom_clothing_url = Column(String(500), nullable=True, comment="下装图片URL") task_id = Column(String(100), nullable=True, index=True, comment="任务ID") completion_url = Column(String(500), nullable=True, comment="生成结果URL") status = Column(Enum(TryonStatus), default=TryonStatus.GENERATING, comment="状态") create_time = Column(DateTime, default=func.now(), comment="创建时间") update_time = Column(DateTime, default=func.now(), onupdate=func.now(), comment="更新时间") # 关系 user = relationship("User", backref="tryon_histories") person_image = relationship("PersonImage", backref="tryon_histories") top_clothing = relationship("Clothing", foreign_keys=[top_clothing_id], backref="top_tryon_histories") bottom_clothing = relationship("Clothing", foreign_keys=[bottom_clothing_id], backref="bottom_tryon_histories") def __repr__(self): return f""