"""Admin request/response schemas.""" from typing import Literal from pydantic import BaseModel, Field class UserManagement(BaseModel): """Schema for user access management.""" has_access: bool class PasswordReset(BaseModel): """Schema for resetting a user's password.""" new_password: str = Field(..., min_length=6) class CreateUserRequest(BaseModel): """Schema for admin-created user accounts.""" username: str = Field(..., min_length=1) password: str = Field(..., min_length=6) role: str = Field(default="user", pattern=r"^(user|admin)$") has_access: bool = False class RegistrationToggle(BaseModel): """Schema for toggling registration on/off.""" enabled: bool class SystemSettingUpdate(BaseModel): """Schema for updating a system setting.""" value: str = Field(..., min_length=1) class DataCleanupRequest(BaseModel): """Schema for data cleanup — delete records older than N days.""" older_than_days: int = Field(..., gt=0) class JobToggle(BaseModel): """Schema for enabling/disabling a scheduled job.""" enabled: bool class RecommendationConfigUpdate(BaseModel): high_confidence_threshold: float | None = Field(default=None, ge=0, le=100) moderate_confidence_threshold: float | None = Field(default=None, ge=0, le=100) confidence_diff_threshold: float | None = Field(default=None, ge=0, le=100) signal_alignment_weight: float | None = Field(default=None, ge=0, le=1) sr_strength_weight: float | None = Field(default=None, ge=0, le=1) distance_penalty_factor: float | None = Field(default=None, ge=0, le=1) momentum_technical_divergence_threshold: float | None = Field(default=None, ge=0, le=100) fundamental_technical_divergence_threshold: float | None = Field(default=None, ge=0, le=100) class TickerUniverseUpdate(BaseModel): universe: Literal["sp500", "nasdaq100", "nasdaq_all"]