event.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from typing import TYPE_CHECKING
  2. from core_events import EventDeliveryStatus, EventPublishContract, EventRecordContract
  3. from core_shared import JSONValue
  4. from pydantic import BaseModel, Field
  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 EventListRequest(BaseModel):
  14. event_type: str | None = None
  15. source_service: str | None = None
  16. aggregate_type: str | None = None
  17. aggregate_id: str | None = None
  18. correlation_id: str | None = None
  19. status: EventDeliveryStatus | None = None
  20. limit: int = Field(default=100, ge=1, le=500)
  21. class EventDeliveryStatusUpdateRequest(BaseModel):
  22. status: EventDeliveryStatus
  23. last_error_message: str | None = None
  24. class EventDeliveryStatusPostRequest(EventDeliveryStatusUpdateRequest):
  25. event_record_id: str
  26. class PendingEventClaimRequest(BaseModel):
  27. limit: int = Field(default=100, ge=1, le=500)
  28. class EventBatchPublishRequest(BaseModel):
  29. events: list[EventPublishRequest] = Field(default_factory=list, min_length=1, max_length=500)
  30. class EventBatchPublishResponse(BaseModel):
  31. events: list[EventRecordResponse]
  32. count: int
  33. class EventStatsResponse(BaseModel):
  34. counts_json: dict[str, JSONValue]