"""Pydantic models for Lambda event validation.""" from typing import Any from pydantic import BaseModel, Field, field_serializer class EventBridgeEventMetadata(BaseModel): """Metadata section for EventBridgeEvent.""" correlation_id: str = Field(..., description='Correlation ID for tracing') outbox_event_id: int = Field(..., description='ID of the source outbox event') target_id: int = Field(..., description='ID of the target entity') target_type: str = Field(..., description='Type of the target entity') created_at: str = Field( ..., description='ISO 8601 timestamp when event was created in outbox' ) processed_at: str = Field( ..., description='ISO 8601 timestamp when event was processed by Lambda' ) class EventBridgeEventDetail(BaseModel): """Event detail section for EventBridgeEvent.""" metadata: EventBridgeEventMetadata = Field(..., description='Event metadata') data: Any | None = Field(..., description='Event business data') class EventBridgeEvent(BaseModel): """Lambda event for adjustment file initialization.""" source: str = Field(serialization_alias='Source') detail_type: str = Field(serialization_alias='DetailType') detail: EventBridgeEventDetail = Field(serialization_alias='Detail') event_bus_name: str = Field(default='default', serialization_alias='EventBusName') resources: list[str] | None = Field(default=None, serialization_alias='Resources') trace_header: str | None = Field(default=None, serialization_alias='TraceHeader') @field_serializer('detail') def serialize_detail(self, detail: EventBridgeEventDetail, _info: Any) -> str: """Serialize detail field to JSON string. EventBridge requires the Detail field to be a JSON string, not a dict. Args: detail: The EventBridgeEventDetail object to serialize. _info: Pydantic serialization context (unused). Returns: str: JSON string representation of the detail. """ return detail.model_dump_json()