event.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from typing import TYPE_CHECKING
  2. from pydantic import BaseModel, Field
  3. from core_events import EventDeliveryStatus, EventPublishContract, EventRecordContract
  4. from core_shared import JSONValue
  5. if TYPE_CHECKING:
  6. from app.db.models import EventRecord
  7. class EventPublishRequest(EventPublishContract):
  8. pass
  9. class EventRecordResponse(EventRecordContract):
  10. @classmethod
  11. def from_entity(cls, entity: "EventRecord") -> "EventRecordResponse":
  12. return cls.model_validate(entity, from_attributes=True)
  13. class EventDeliveryStatusUpdateRequest(BaseModel):
  14. tenant_id: str
  15. status: EventDeliveryStatus
  16. last_error_message: str | None = None
  17. class PendingEventClaimRequest(BaseModel):
  18. tenant_id: str
  19. limit: int = Field(default=100, ge=1, le=500)
  20. class EventBatchPublishRequest(BaseModel):
  21. events: list[EventPublishRequest] = Field(default_factory=list, min_length=1, max_length=500)
  22. class EventBatchPublishResponse(BaseModel):
  23. events: list[EventRecordResponse]
  24. count: int
  25. class EventStatsResponse(BaseModel):
  26. tenant_id: str
  27. counts_json: dict[str, JSONValue]