"""Ban history Pydantic models.""" from pydantic import BaseModel, ConfigDict, Field class HistoryEntry(BaseModel): """A single historical ban record from the fail2ban database.""" model_config = ConfigDict(strict=True) ip: str jail: str banned_at: str = Field(..., description="ISO 8601 UTC timestamp of the ban.") released_at: str | None = Field(default=None, description="ISO 8601 UTC timestamp when the ban expired.") ban_count: int = Field(..., ge=1, description="Total number of times this IP was banned.") country: str | None = None matched_lines: list[str] = Field(default_factory=list) class IpTimeline(BaseModel): """Per-IP ban history timeline.""" model_config = ConfigDict(strict=True) ip: str total_bans: int = Field(..., ge=0) total_failures: int = Field(..., ge=0) events: list[HistoryEntry] = Field(default_factory=list) class HistoryListResponse(BaseModel): """Paginated response for ``GET /api/history``.""" model_config = ConfigDict(strict=True) entries: list[HistoryEntry] = Field(default_factory=list) total: int = Field(..., ge=0) class IpHistoryResponse(BaseModel): """Response for ``GET /api/history/{ip}``.""" model_config = ConfigDict(strict=True) timeline: IpTimeline