47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
"""资产配置与组合诊断路由(业务在 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,
|
||
|
|
)
|
||
|
|
)
|