cache_api.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. """
  2. 股票文件缓存 API — grep搜索、缓存管理、数据统计
  3. """
  4. from fastapi import APIRouter, Query
  5. from app.services.stock_file_cache import get_stock_file_cache
  6. from app.utils.response import success_response, error_response
  7. router = APIRouter(prefix="/cache", tags=["文件缓存"])
  8. @router.get("/search")
  9. async def grep_search(
  10. keyword: str = Query(..., description="搜索关键词"),
  11. data_type: str = Query(None, description="限定数据类型: quote/financial/profile/holders/sentiment"),
  12. ):
  13. """grep 风格搜索缓存文件内容
  14. 在所有已缓存的股票数据文件中搜索关键词,返回匹配结果。
  15. """
  16. fc = get_stock_file_cache()
  17. results = fc.grep_search(keyword, data_type)
  18. return success_response(data={
  19. "keyword": keyword,
  20. "total_matches": len(results),
  21. "results": results,
  22. })
  23. @router.get("/stock/{stock_code}")
  24. async def get_stock_cache_info(stock_code: str):
  25. """查询某股票的缓存状态"""
  26. fc = get_stock_file_cache()
  27. data_types = fc.get_stock_data_types(stock_code)
  28. return success_response(data={
  29. "stock_code": stock_code,
  30. "cached_types": data_types,
  31. "has_quote": "quote" in data_types,
  32. "has_financial": "financial" in data_types,
  33. "has_profile": "profile" in data_types,
  34. "has_holders": "holders" in data_types,
  35. "has_sentiment": "sentiment" in data_types,
  36. })
  37. @router.get("/stats")
  38. async def cache_stats():
  39. """获取缓存统计信息"""
  40. fc = get_stock_file_cache()
  41. return success_response(data=fc.get_stats())
  42. @router.delete("/clear")
  43. async def clear_cache(
  44. stock_code: str = Query(None, description="指定股票代码,不传则清空全部"),
  45. ):
  46. """清除文件缓存"""
  47. fc = get_stock_file_cache()
  48. fc.clear_stock_cache(stock_code)
  49. return success_response(message=f"缓存已清除{'(' + stock_code + ')' if stock_code else ''}")
  50. @router.get("/list")
  51. async def list_cached_stocks():
  52. """列出所有已缓存的股票代码"""
  53. fc = get_stock_file_cache()
  54. codes = fc.get_stock_codes()
  55. result = []
  56. for code in codes:
  57. types = fc.get_stock_data_types(code)
  58. result.append({"code": code, "data_types": types})
  59. return success_response(data={"stocks": result, "total": len(result)})