| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- """
- 股票文件缓存 API — grep搜索、缓存管理、数据统计
- """
- from fastapi import APIRouter, Query
- from app.services.stock_file_cache import get_stock_file_cache
- from app.utils.response import success_response, error_response
- router = APIRouter(prefix="/cache", tags=["文件缓存"])
- @router.get("/search")
- async def grep_search(
- keyword: str = Query(..., description="搜索关键词"),
- data_type: str = Query(None, description="限定数据类型: quote/financial/profile/holders/sentiment"),
- ):
- """grep 风格搜索缓存文件内容
- 在所有已缓存的股票数据文件中搜索关键词,返回匹配结果。
- """
- fc = get_stock_file_cache()
- results = fc.grep_search(keyword, data_type)
- return success_response(data={
- "keyword": keyword,
- "total_matches": len(results),
- "results": results,
- })
- @router.get("/stock/{stock_code}")
- async def get_stock_cache_info(stock_code: str):
- """查询某股票的缓存状态"""
- fc = get_stock_file_cache()
- data_types = fc.get_stock_data_types(stock_code)
- return success_response(data={
- "stock_code": stock_code,
- "cached_types": data_types,
- "has_quote": "quote" in data_types,
- "has_financial": "financial" in data_types,
- "has_profile": "profile" in data_types,
- "has_holders": "holders" in data_types,
- "has_sentiment": "sentiment" in data_types,
- })
- @router.get("/stats")
- async def cache_stats():
- """获取缓存统计信息"""
- fc = get_stock_file_cache()
- return success_response(data=fc.get_stats())
- @router.delete("/clear")
- async def clear_cache(
- stock_code: str = Query(None, description="指定股票代码,不传则清空全部"),
- ):
- """清除文件缓存"""
- fc = get_stock_file_cache()
- fc.clear_stock_cache(stock_code)
- return success_response(message=f"缓存已清除{'(' + stock_code + ')' if stock_code else ''}")
- @router.get("/list")
- async def list_cached_stocks():
- """列出所有已缓存的股票代码"""
- fc = get_stock_file_cache()
- codes = fc.get_stock_codes()
- result = []
- for code in codes:
- types = fc.get_stock_data_types(code)
- result.append({"code": code, "data_types": types})
- return success_response(data={"stocks": result, "total": len(result)})
|