from datetime import datetime from typing import Literal from pydantic import BaseModel, Field, HttpUrl, model_validator Severity = Literal["ok", "info", "warning", "critical"] class CustomerReferenceCreate(BaseModel): customer_name: str = Field(min_length=1, max_length=180) logo_url: str | None = Field(default=None, max_length=500) website_url: HttpUrl | None = None sort_order: int = Field(default=100, ge=0, le=100000) is_active: bool = True class CustomerReferenceUpdate(BaseModel): customer_name: str | None = Field(default=None, min_length=1, max_length=180) logo_url: str | None = Field(default=None, max_length=500) website_url: HttpUrl | None = None sort_order: int | None = Field(default=None, ge=0, le=100000) is_active: bool | None = None class OperationCreate(BaseModel): title: str = Field(min_length=1, max_length=180) severity: Severity = "info" message: str = Field(min_length=1, max_length=20000) starts_at: datetime | None = None ends_at: datetime | None = None is_active: bool = True @model_validator(mode="after") def validate_dates(self): if self.starts_at and self.ends_at and self.ends_at < self.starts_at: raise ValueError("Sluttid skal ligge efter starttid") return self class OperationUpdate(BaseModel): title: str | None = Field(default=None, min_length=1, max_length=180) severity: Severity | None = None message: str | None = Field(default=None, min_length=1, max_length=20000) starts_at: datetime | None = None ends_at: datetime | None = None is_active: bool | None = None class IncidentCreate(BaseModel): title: str = Field(min_length=1, max_length=180) severity: Severity = "info" message: str = Field(min_length=1, max_length=20000) starts_at: datetime | None = None ends_at: datetime | None = None is_public: bool = True class IncidentUpdate(BaseModel): title: str | None = Field(default=None, min_length=1, max_length=180) severity: Severity | None = None message: str | None = Field(default=None, min_length=1, max_length=20000) starts_at: datetime | None = None ends_at: datetime | None = None is_public: bool | None = None class CompleteOperation(BaseModel): ends_at: datetime | None = None is_public: bool = True