50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
"""产品路由:列表 + 历史业绩(匿名可访问,业务在 service/product.py)。"""
|
|||
|
|
from datetime import date
|
||
|
|
|
||
|
|
from fastapi import APIRouter, Depends, Query
|
||
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
|
|
||
|
|
from config.deps import get_db
|
||
|
|
from service.product import get_history, list_products
|
||
|
|
from utils.response import success
|
||
|
|
|
||
|
|
router = APIRouter()
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/products")
|
||
|
|
async def products(
|
||
|
|
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),
|
||
|
|
status: str = Query("在售", max_length=16),
|
||
|
|
sort_by: str = Query("create_time", max_length=32),
|
||
|
|
sort_order: str = Query("desc", max_length=4),
|
||
|
|
db: AsyncSession = Depends(get_db),
|
||
|
|
):
|
||
|
|
data = await list_products(
|
||
|
|
db,
|
||
|
|
page=page,
|
||
|
|
page_size=page_size,
|
||
|
|
keyword=keyword,
|
||
|
|
product_type=product_type,
|
||
|
|
risk_level=risk_level,
|
||
|
|
status=status,
|
||
|
|
sort_by=sort_by,
|
||
|
|
sort_order=sort_order,
|
||
|
|
)
|
||
|
|
return success(data)
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/products/{product_code}/history")
|
||
|
|
async def history(
|
||
|
|
product_code: str,
|
||
|
|
start_date: date | None = Query(None),
|
||
|
|
end_date: date | None = Query(None),
|
||
|
|
series: str = Query("nav", max_length=16),
|
||
|
|
db: AsyncSession = Depends(get_db),
|
||
|
|
):
|
||
|
|
data = await get_history(db, product_code, start_date, end_date, series)
|
||
|
|
return success(data)
|