2026-01-20 17:38:01 +05:30
|
|
|
import uuid
|
|
|
|
|
from sqlalchemy import Column, String, DateTime, func, Text, Integer, ForeignKey
|
|
|
|
|
from sqlalchemy.dialects.postgresql import UUID, JSONB
|
|
|
|
|
from app.config.database import Base
|
|
|
|
|
import enum
|
|
|
|
|
|
|
|
|
|
class EventStatus(str, enum.Enum):
|
|
|
|
|
PENDING = "PENDING"
|
|
|
|
|
COMPLETED = "COMPLETED"
|
|
|
|
|
FAILED = "FAILED"
|
|
|
|
|
|
|
|
|
|
class EventLog(Base):
|
|
|
|
|
__tablename__ = "event_logs"
|
|
|
|
|
|
|
|
|
|
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
2026-08-31 20:39:41 -04:00
|
|
|
event_id = Column(UUID(as_uuid=True), nullable=False, index=True)
|
2026-01-20 17:38:01 +05:30
|
|
|
event_type = Column(String, nullable=False)
|
|
|
|
|
payload = Column(JSONB, nullable=False)
|
|
|
|
|
|
|
|
|
|
target_module_id = Column(UUID(as_uuid=True), nullable=False)
|
|
|
|
|
target_environment_slug = Column(String, nullable=False)
|
|
|
|
|
target_url = Column(String, nullable=False)
|
|
|
|
|
|
|
|
|
|
status = Column(String, default=EventStatus.PENDING, index=True)
|
|
|
|
|
retry_count = Column(Integer, default=0)
|
|
|
|
|
next_retry_at = Column(DateTime(timezone=True), default=func.now(), index=True)
|
|
|
|
|
error_log = Column(Text, nullable=True)
|
2026-04-09 11:55:58 +05:30
|
|
|
follow_up_event = Column(JSONB, nullable=True)
|
2026-01-20 17:38:01 +05:30
|
|
|
|
|
|
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
|
updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
|
|
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
|
return f"<EventLog {self.event_type} -> {self.target_module_id} ({self.status})>"
|