feat(api): Pydantic schemas + Data Repositories
This commit is contained in:
57
app/schemas/incident.py
Normal file
57
app/schemas/incident.py
Normal file
@@ -0,0 +1,57 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user