39 lines
2.1 KiB
Python
39 lines
2.1 KiB
Python
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="状态")
|
|
comment = Column(String(500), nullable=True, comment="穿搭评价")
|
|
score = Column(Integer, nullable=True, comment="穿搭评分(满分100)")
|
|
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"<TryonHistory(id={self.id}, status={self.status.name})>" |