Files
saas_backend/app/models/system/event_log_model.py
T
2026-08-31 20:39:41 -04:00

35 lines
1.3 KiB
Python

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)
event_id = Column(UUID(as_uuid=True), nullable=False, index=True)
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)
follow_up_event = Column(JSONB, nullable=True)
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})>"