from datetime import datetime from sqlalchemy import CHAR, BigInteger, CheckConstraint, Column, DateTime, ForeignKey, String, Text from config.database import Base class BizTestBatch(Base): """测试数据批次。""" __tablename__ = 'biz_test_batch' __table_args__ = ( CheckConstraint("status IN ('ACTIVE', 'CLOSED', 'PURGED')", name='ck_biz_test_batch_status'), CheckConstraint( "preview_action IS NULL OR preview_action IN ('ADOPT', 'PURGE')", name='ck_biz_test_batch_preview_action', ), {'comment': '测试数据批次'}, ) batch_id = Column(BigInteger, primary_key=True, autoincrement=True) batch_code = Column(String(64), nullable=False, unique=True) batch_name = Column(String(100), nullable=False) status = Column(String(16), nullable=False, server_default='ACTIVE') create_by = Column(String(64), nullable=False, server_default='') create_time = Column(DateTime, nullable=False, default=datetime.now) update_by = Column(String(64), nullable=False, server_default='') update_time = Column(DateTime, nullable=False, default=datetime.now) closed_by = Column(BigInteger, ForeignKey('sys_user.user_id'), nullable=True) closed_at = Column(DateTime, nullable=True) purged_by = Column(BigInteger, ForeignKey('sys_user.user_id'), nullable=True) purged_at = Column(DateTime, nullable=True) purge_summary = Column(Text, nullable=True) preview_action = Column(String(16), nullable=True) preview_token_hash = Column(CHAR(64), nullable=True) preview_scope_hash = Column(CHAR(64), nullable=True) preview_expires_at = Column(DateTime, nullable=True) remark = Column(String(500), nullable=True) class BizTestBatchUser(Base): """测试数据批次与用户关联。""" __tablename__ = 'biz_test_batch_user' batch_id = Column(BigInteger, ForeignKey('biz_test_batch.batch_id'), primary_key=True) user_id = Column(BigInteger, ForeignKey('sys_user.user_id'), primary_key=True) create_by = Column(String(64), nullable=False, server_default='') create_time = Column(DateTime, nullable=False, default=datetime.now)