"""Incident-related schemas.""" from datetime import datetime from typing import Any, Literal from uuid import UUID from pydantic import BaseModel, Field IncidentStatus = Literal["triggered", "acknowledged", "mitigated", "resolved"] IncidentSeverity = Literal["critical", "high", "medium", "low"] class IncidentCreate(BaseModel): """Request body for creating an incident.""" title: str = Field(min_length=1, max_length=200) description: str | None = Field(default=None, max_length=5000) severity: IncidentSeverity = "medium" class IncidentResponse(BaseModel): """Incident response.""" id: UUID service_id: UUID title: str description: str | None status: IncidentStatus severity: IncidentSeverity version: int created_at: datetime updated_at: datetime class IncidentEventResponse(BaseModel): """Incident event response.""" id: UUID incident_id: UUID event_type: str actor_user_id: UUID | None payload: dict[str, Any] | None created_at: datetime class TransitionRequest(BaseModel): """Request body for transitioning incident status.""" to_status: IncidentStatus version: int = Field(description="Current version for optimistic locking") note: str | None = Field(default=None, max_length=1000) class CommentRequest(BaseModel): """Request body for adding a comment to an incident.""" content: str = Field(min_length=1, max_length=5000)