import ulid from sqlalchemy import Column, String, Integer, DateTime, JSON, Index from sqlalchemy.sql import func from app.core.database.db_session import Base class OutboxEvent(Base): __tablename__ = "outbox_events" event_id = Column(String(26), primary_key=True, default=lambda: str(ulid.new())) aggregate_type = Column(String(50), nullable=False, index=True) # PRODUCT, ORDER, INVENTORY, INVOICE aggregate_id = Column(String(26), nullable=False, index=True) aggregate_version = Column(Integer, nullable=False) payload_json = Column(JSON, nullable=False) status = Column(String(20), default="PENDING", index=True) # PENDING, PROCESSED, FAILED created_at = Column(DateTime, server_default=func.now(), index=True) __table_args__ = ( Index('idx_outbox_status_created', 'status', 'created_at'), Index('idx_outbox_aggregate_ver', 'aggregate_type', 'aggregate_id', 'aggregate_version'), )