watchlist.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. """
  2. 智能股票分析助手 — 自选股管理API路由
  3. 提供自选股查询、添加、删除接口。
  4. """
  5. from fastapi import APIRouter, Query
  6. from pydantic import BaseModel, Field
  7. from app.services import watchlist_service
  8. from app.utils.response import success_response, error_response
  9. router = APIRouter(prefix="/watchlist", tags=["自选股管理"])
  10. class WatchlistAddRequest(BaseModel):
  11. """添加自选股请求"""
  12. stock: str = Field(..., description="股票名称或代码,如'贵州茅台'或'600519'", min_length=1)
  13. class WatchlistDeleteRequest(BaseModel):
  14. """删除自选股请求"""
  15. stock: str = Field(..., description="股票名称或代码,如'贵州茅台'或'600519'", min_length=1)
  16. @router.get("/")
  17. async def get_watchlist():
  18. """查询自选股列表
  19. 返回当前账户下的所有自选股及其行情数据。
  20. """
  21. result = watchlist_service.get_watchlist()
  22. if not result["success"]:
  23. return error_response(code=500, message=result.get("error", "查询自选股失败"))
  24. return success_response(
  25. data={
  26. "stocks": result["stocks"],
  27. "total": result["total"],
  28. },
  29. message=f"共 {result['total']} 只自选股",
  30. )
  31. @router.post("/")
  32. async def add_watchlist(body: WatchlistAddRequest):
  33. """添加自选股
  34. 将指定股票添加到自选股列表。
  35. - **stock**: 股票名称或6位代码,如'贵州茅台'、'600519'
  36. """
  37. if not body.stock or not body.stock.strip():
  38. return error_response(code=400, message="请输入股票名称或代码")
  39. result = watchlist_service.add_to_watchlist(body.stock.strip())
  40. if not result["success"]:
  41. return error_response(code=500, message=result.get("error", "添加自选股失败"))
  42. return success_response(data=result, message=result["message"])
  43. @router.delete("/{stock}")
  44. async def delete_watchlist(stock: str):
  45. """删除自选股
  46. 将指定股票从自选股列表中移除。
  47. - **stock**: 股票名称或6位代码,如'贵州茅台'、'600519'
  48. """
  49. if not stock or not stock.strip():
  50. return error_response(code=400, message="请输入股票名称或代码")
  51. result = watchlist_service.delete_from_watchlist(stock.strip())
  52. if not result["success"]:
  53. return error_response(code=500, message=result.get("error", "删除自选股失败"))
  54. return success_response(data=result, message=result["message"])