from typing import TYPE_CHECKING from core_events import EventDeliveryStatus, EventPublishContract, EventRecordContract from core_shared import JSONValue from pydantic import BaseModel, Field if TYPE_CHECKING: from app.db.models import EventRecord class EventPublishRequest(EventPublishContract): pass class EventRecordResponse(EventRecordContract): @classmethod def from_entity(cls, entity: "EventRecord") -> "EventRecordResponse": return cls.model_validate(entity, from_attributes=True) class EventListRequest(BaseModel): event_type: str | None = None source_service: str | None = None aggregate_type: str | None = None aggregate_id: str | None = None correlation_id: str | None = None status: EventDeliveryStatus | None = None limit: int = Field(default=100, ge=1, le=500) class EventDeliveryStatusUpdateRequest(BaseModel): status: EventDeliveryStatus last_error_message: str | None = None class EventDeliveryStatusPostRequest(EventDeliveryStatusUpdateRequest): event_record_id: str class PendingEventClaimRequest(BaseModel): limit: int = Field(default=100, ge=1, le=500) class EventBatchPublishRequest(BaseModel): events: list[EventPublishRequest] = Field(default_factory=list, min_length=1, max_length=500) class EventBatchPublishResponse(BaseModel): events: list[EventRecordResponse] count: int class EventStatsResponse(BaseModel): counts_json: dict[str, JSONValue]