router.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import time
  2. from typing import List
  3. from fastapi import APIRouter, Query, Depends
  4. from app.core.redis import get_redis_client
  5. from redis.asyncio import Redis
  6. from app.schemas.user import UserOut
  7. from app.schemas.troov import TroovRate
  8. from app.schemas.sms import ShortMessageDetail
  9. from app.services.troov_service import get_rate_by_date
  10. from app.services.sms_service import save_short_message, query_short_message
  11. # 公共路由
  12. public_router = APIRouter(tags=["public"])
  13. # 受保护路由
  14. protected_router = APIRouter(tags=["protected"])
  15. @public_router.get("/ping", summary="心跳检测")
  16. def ping():
  17. return {"message": "pong"}
  18. @public_router.get("/sms/upload", summary="上报短信", response_model=ShortMessageDetail)
  19. def sms_upload(
  20. phone: str = Query(..., description="手机号"),
  21. message: str = Query(..., description="短信内容"),
  22. max_ttl: int = Query(300, description="短信保存时间(秒)"),
  23. redis_client: Redis = Depends(get_redis_client)
  24. ):
  25. """
  26. 保存短信到 Redis
  27. """
  28. received_at = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
  29. msg = save_short_message(redis_client, phone, message, received_at, max_ttl)
  30. return msg
  31. @protected_router.get("/users", summary="查询用户", response_model=List[UserOut])
  32. def get_users():
  33. return [
  34. {"id": 1, "name": "Alice"},
  35. {"id": 2, "name": "Bob"}
  36. ]
  37. @protected_router.get("/troov/rate", summary="TROOV 查询rate", response_model=List[TroovRate])
  38. def troov_rate(date: str = Query(..., description="查询的日期, 格式: YYYY-MM-DD"),
  39. redis_client: Redis = Depends(get_redis_client)):
  40. # 调用 service 层获取数据
  41. return get_rate_by_date(redis_client, date)
  42. @protected_router.get("/sms/download", summary="读取短信", response_model=List[ShortMessageDetail])
  43. def sms_download(
  44. phone: str = Query(..., description="手机号"),
  45. keyword: str = Query('', description="短信内容关键字"),
  46. sent_at: str = Query('', description="筛选时间(可选)"),
  47. redis_client: Redis = Depends(get_redis_client)
  48. ):
  49. """
  50. 查询短信(支持关键字和时间过滤)
  51. """
  52. results = query_short_message(redis_client, phone, keyword or None, sent_at or None)
  53. return results