from typing import Literal from pydantic import BaseModel, EmailStr, Field, field_validator from app.core.password_policy import validate_password_strength class AdminUserPatchIn(BaseModel): role: Literal["user", "admin"] | None = None status: Literal["pending", "active", "blocked"] | None = None is_superuser: bool | None = None class AdminUserCreateIn(BaseModel): email: EmailStr password: str = Field(min_length=8) role: Literal["user", "admin"] = "user" is_superuser: bool = False status: Literal["pending", "active", "blocked"] = "active" @field_validator("password") @classmethod def password_policy(cls, value: str) -> str: return validate_password_strength(value) class AdminUserPasswordPatchIn(BaseModel): password: str = Field(min_length=8) @field_validator("password") @classmethod def password_policy(cls, value: str) -> str: return validate_password_strength(value) class AdminSettingsPatchIn(BaseModel): values: dict class AdminUiActivityIn(BaseModel): event: str meta: dict | None = None class AdminRevealSecretIn(BaseModel): key: Literal["database_password", "jwt_access_secret", "jwt_refresh_pepper", "s3_secret_key"]