from datetime import datetime from pydantic import BaseModel, EmailStr, field_validator, model_validator class EmailSettingsOut(BaseModel): enabled: bool smtp_host: str | None smtp_port: int smtp_username: str | None from_name: str | None from_email: EmailStr | None use_starttls: bool use_ssl: bool alert_recipients: list[EmailStr] has_password: bool updated_at: datetime | None class EmailSettingsUpdate(BaseModel): enabled: bool = False smtp_host: str | None = None smtp_port: int = 587 smtp_username: str | None = None smtp_password: str | None = None clear_smtp_password: bool = False from_name: str | None = None from_email: EmailStr | None = None use_starttls: bool = True use_ssl: bool = False alert_recipients: list[EmailStr] = [] @field_validator("smtp_port") @classmethod def validate_port(cls, value: int) -> int: if value < 1 or value > 65535: raise ValueError("smtp_port must be between 1 and 65535") return value @model_validator(mode="after") def validate_tls_combo(self): if self.use_starttls and self.use_ssl: raise ValueError("use_starttls and use_ssl cannot both be true") return self class EmailSettingsTestRequest(BaseModel): recipient: EmailStr subject: str = "NexaPG test notification" message: str = "This is a test alert notification from NexaPG."