70 lines
2.3 KiB
Python
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
|