| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import time
- from typing import List
- from fastapi import APIRouter, Query, Depends
- from app.core.redis import get_redis_client
- from redis.asyncio import Redis
- from app.schemas.user import UserOut
- from app.schemas.troov import TroovRate
- from app.schemas.sms import ShortMessageDetail
- from app.services.troov_service import get_rate_by_date
- from app.services.sms_service import save_short_message, query_short_message
- # 公共路由
- public_router = APIRouter(tags=["public"])
- # 受保护路由
- protected_router = APIRouter(tags=["protected"])
- @public_router.get("/ping", summary="心跳检测")
- def ping():
- return {"message": "pong"}
- @public_router.get("/sms/upload", summary="上报短信", response_model=ShortMessageDetail)
- def sms_upload(
- phone: str = Query(..., description="手机号"),
- message: str = Query(..., description="短信内容"),
- max_ttl: int = Query(300, description="短信保存时间(秒)"),
- redis_client: Redis = Depends(get_redis_client)
- ):
- """
- 保存短信到 Redis
- """
- received_at = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
- msg = save_short_message(redis_client, phone, message, received_at, max_ttl)
- return msg
- @protected_router.get("/users", summary="查询用户", response_model=List[UserOut])
- def get_users():
- return [
- {"id": 1, "name": "Alice"},
- {"id": 2, "name": "Bob"}
- ]
- @protected_router.get("/troov/rate", summary="TROOV 查询rate", response_model=List[TroovRate])
- def troov_rate(date: str = Query(..., description="查询的日期, 格式: YYYY-MM-DD"),
- redis_client: Redis = Depends(get_redis_client)):
- # 调用 service 层获取数据
- return get_rate_by_date(redis_client, date)
- @protected_router.get("/sms/download", summary="读取短信", response_model=List[ShortMessageDetail])
- def sms_download(
- phone: str = Query(..., description="手机号"),
- keyword: str = Query('', description="短信内容关键字"),
- sent_at: str = Query('', description="筛选时间(可选)"),
- redis_client: Redis = Depends(get_redis_client)
- ):
- """
- 查询短信(支持关键字和时间过滤)
- """
- results = query_short_message(redis_client, phone, keyword or None, sent_at or None)
- return results
|