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 EventDeliveryStatusUpdateRequest(BaseModel): status: EventDeliveryStatus last_error_message: str | None = None 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]