client_distribution.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, BigInteger
  2. from sqlalchemy.sql import func
  3. from sqlalchemy.orm import relationship
  4. from app.core.database import Base
  5. class ClientDistribution(Base):
  6. __tablename__ = "client_distributions"
  7. id = Column(Integer, primary_key=True, index=True)
  8. name = Column(String(100), nullable=False)
  9. description = Column(Text, nullable=True)
  10. icon_url = Column(String(255), nullable=True)
  11. owner_id = Column(Integer, ForeignKey("users.id"), nullable=False)
  12. is_deleted = Column(Integer, default=0, nullable=False)
  13. created_at = Column(DateTime(timezone=True), server_default=func.now())
  14. updated_at = Column(DateTime(timezone=True), onupdate=func.now(), server_default=func.now())
  15. owner = relationship("User")
  16. versions = relationship("ClientVersion", back_populates="distribution", cascade="all, delete-orphan")
  17. class ClientVersion(Base):
  18. __tablename__ = "client_versions"
  19. id = Column(Integer, primary_key=True, index=True)
  20. distribution_id = Column(Integer, ForeignKey("client_distributions.id", ondelete="CASCADE"), nullable=False)
  21. version_code = Column(String(32), nullable=False)
  22. version_name = Column(String(100), nullable=True)
  23. release_notes = Column(Text, nullable=True)
  24. object_key = Column(String(512), nullable=False)
  25. file_size = Column(BigInteger, nullable=True)
  26. platform = Column(String(32), nullable=True)
  27. created_at = Column(DateTime(timezone=True), server_default=func.now())
  28. distribution = relationship("ClientDistribution", back_populates="versions")