"""Alert schemas.""" from datetime import datetime from typing import List, Optional from pydantic import BaseModel, Field # ── Alert Rule ───────────────────────────────────────────────── class AlertRuleCreate(BaseModel): project_id: str = Field(..., min_length=1, max_length=36) name: str = Field(..., min_length=1, max_length=128) level: str = Field(default="warning", pattern="^(info|warning|critical)$") field: str = Field(default="level", max_length=64) operator: str = Field(default="gte", pattern="^(gt|gte|lt|lte|eq)$") threshold: float = Field(..., ge=0) window_minutes: int = Field(default=5, ge=1, le=1440) notify_channels: List[str] = Field(default_factory=list) class AlertRuleUpdate(BaseModel): name: Optional[str] = Field(default=None, max_length=128) level: Optional[str] = Field(default=None, pattern="^(info|warning|critical)$") field: Optional[str] = Field(default=None, max_length=64) operator: Optional[str] = Field(default=None, pattern="^(gt|gte|lt|lte|eq)$") threshold: Optional[float] = Field(default=None, ge=0) window_minutes: Optional[int] = Field(default=None, ge=1, le=1440) is_enabled: Optional[bool] = None notify_channels: Optional[List[str]] = None class AlertRuleResponse(BaseModel): id: str project_id: str name: str level: str field: str operator: str threshold: float window_minutes: int is_enabled: bool notify_channels: List[str] created_at: datetime model_config = {"from_attributes": True} # ── Alert History ────────────────────────────────────────────── class AlertHistoryResponse(BaseModel): id: str rule_id: str project_id: str level: str message: str triggered_value: Optional[float] = None is_acknowledged: bool triggered_at: datetime model_config = {"from_attributes": True}