"""资产配置与组合诊断路由(业务在 service/advisor/diagnosis.py,路由只做编排)。""" from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from api.deps import require_advisor from config.deps import get_db from model.sys_user import SysUser from service.advisor import diagnosis as diagnosis_service from utils.response import success router = APIRouter() @router.get("/diagnosis/{customer_id}", summary="持仓诊断(分布 + 集中度,只读)") async def diagnose( customer_id: int, user: SysUser = Depends(require_advisor), db: AsyncSession = Depends(get_db), ): return success(await diagnosis_service.diagnose(db, user, customer_id)) @router.get("/strategies", summary="标准策略库(只读)") async def strategies( user: SysUser = Depends(require_advisor), db: AsyncSession = Depends(get_db), ): return success(await diagnosis_service.list_strategies(db)) @router.get("/funds", summary="白名单产品筛选") async def funds( page: int = Query(1, ge=1), page_size: int = Query(10, ge=1, le=100), keyword: str | None = Query(None, max_length=64), product_type: str | None = Query(None, max_length=32), risk_level: str | None = Query(None, max_length=8), user: SysUser = Depends(require_advisor), db: AsyncSession = Depends(get_db), ): return success( await diagnosis_service.list_funds( db, page=page, page_size=page_size, keyword=keyword, product_type=product_type, risk_level=risk_level, ) )