# coding=utf-8 """本地离线上传队列表(主要用于 SQLite 缓存侧)。""" from datetime import datetime from sqlalchemy import Column, DateTime, Index, Integer, String, Text from sqlalchemy.sql import func from dao.db import Base class UploadQueue(Base): __tablename__ = 'upload_queue' id = Column(Integer, primary_key=True, autoincrement=True, comment='主键ID') action = Column(String(40), nullable=False, comment='insert / delete_template / delete_category / clear_all / set_threshold') payload_json = Column(Text, nullable=False, comment='动作参数 JSON') status = Column(String(20), nullable=False, default='pending', server_default='pending', comment='pending / done / failed') retry_count = Column(Integer, nullable=False, default=0, server_default='0', comment='重试次数') create_time = Column( DateTime, nullable=False, default=datetime.now, server_default=func.now(), comment='创建时间', ) update_time = Column( DateTime, nullable=False, default=datetime.now, server_default=func.now(), onupdate=datetime.now, comment='更新时间', ) error_msg = Column(Text, nullable=True, comment='失败原因') __table_args__ = ( Index('idx_upload_queue_status', 'status'), ) def to_dict(self): return { 'id': self.id, 'action': self.action, 'payload_json': self.payload_json, 'status': self.status, 'retry_count': self.retry_count, 'error_msg': self.error_msg, 'create_time': self.create_time.strftime('%Y-%m-%d %H:%M:%S') if self.create_time else None, 'update_time': self.update_time.strftime('%Y-%m-%d %H:%M:%S') if self.update_time else None, }