"""S/R Levels router — support/resistance detection endpoints.""" from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from app.dependencies import get_db, require_access from app.schemas.common import APIEnvelope from app.schemas.sr_level import SRLevelResponse, SRLevelResult from app.services.sr_service import get_sr_levels router = APIRouter(tags=["sr-levels"]) @router.get("/sr-levels/{symbol}", response_model=APIEnvelope) async def read_sr_levels( symbol: str, tolerance: float = Query(0.005, ge=0, le=0.1, description="Merge tolerance (default 0.5%)"), _user=Depends(require_access), db: AsyncSession = Depends(get_db), ) -> APIEnvelope: """Get support/resistance levels for a symbol, sorted by strength descending.""" levels = await get_sr_levels(db, symbol, tolerance) data = SRLevelResponse( symbol=symbol.upper(), levels=[ SRLevelResult( id=lvl.id, price_level=lvl.price_level, type=lvl.type, strength=lvl.strength, detection_method=lvl.detection_method, created_at=lvl.created_at, ) for lvl in levels ], count=len(levels), ) return APIEnvelope(status="success", data=data.model_dump())