"""Pydantic schemas for watchlist endpoints.""" from __future__ import annotations from datetime import date, datetime from typing import Literal from pydantic import BaseModel, Field class SRLevelSummary(BaseModel): """Compact SR level for watchlist entry.""" price_level: float type: Literal["support", "resistance"] strength: int = Field(ge=0, le=100) class DimensionScoreSummary(BaseModel): """Compact dimension score for watchlist entry.""" dimension: str score: float class WatchlistEntryResponse(BaseModel): """A single watchlist entry with enriched data.""" symbol: str entry_type: Literal["auto", "manual"] composite_score: float | None = None dimensions: list[DimensionScoreSummary] = [] rr_ratio: float | None = None rr_direction: str | None = None sr_levels: list[SRLevelSummary] = [] last_close: float | None = None change_pct: float | None = None price_date: date | None = None added_at: datetime