bmc_hub/app/modules/website_content/backend/schemas.py
2026-08-28 20:49:55 +02:00

70 lines
2.3 KiB
Python

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