history.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. """行程历史记录API路由"""
  2. from fastapi import APIRouter, HTTPException, Request, Query
  3. from ...models.schemas import SaveHistoryRequest
  4. from ...database import save_trip_history, list_trip_history, get_trip_history, delete_trip_history
  5. from .auth import require_auth
  6. router = APIRouter(prefix="/history", tags=["历史记录"])
  7. @router.post("", summary="保存行程到历史记录")
  8. async def save_history(req: SaveHistoryRequest, request: Request):
  9. """保存生成的行程到历史记录"""
  10. user = require_auth(request)
  11. import json
  12. plan_json = json.dumps(req.plan_data, ensure_ascii=False)
  13. hid = save_trip_history(
  14. user_id=user["id"],
  15. city=req.city,
  16. start_date=req.start_date,
  17. end_date=req.end_date,
  18. travel_days=req.travel_days,
  19. preferences=",".join(req.preferences) if req.preferences else "",
  20. traveler_group=req.traveler_group or "",
  21. plan_data=plan_json,
  22. )
  23. return {"success": True, "message": "保存成功", "history_id": hid}
  24. @router.get("", summary="获取历史记录列表")
  25. async def list_history(
  26. request: Request,
  27. page: int = Query(1, ge=1),
  28. page_size: int = Query(20, ge=1, le=50),
  29. ):
  30. """获取当前用户的行程历史记录列表"""
  31. user = require_auth(request)
  32. offset = (page - 1) * page_size
  33. records = list_trip_history(user["id"], limit=page_size, offset=offset)
  34. return {"success": True, "records": records}
  35. @router.get("/{history_id}", summary="获取历史记录详情")
  36. async def get_history(history_id: int, request: Request):
  37. """获取单条历史记录的完整行程数据"""
  38. user = require_auth(request)
  39. record = get_trip_history(history_id, user["id"])
  40. if not record:
  41. raise HTTPException(status_code=404, detail="记录不存在")
  42. import json
  43. plan_data = json.loads(record["plan_data"]) if isinstance(record["plan_data"], str) else record["plan_data"]
  44. return {"success": True, "record": {
  45. "id": record["id"],
  46. "city": record["city"],
  47. "start_date": record["start_date"],
  48. "end_date": record["end_date"],
  49. "travel_days": record["travel_days"],
  50. "preferences": record["preferences"],
  51. "traveler_group": record["traveler_group"],
  52. "created_at": record["created_at"],
  53. "plan_data": plan_data,
  54. }}
  55. @router.delete("/{history_id}", summary="删除历史记录")
  56. async def delete_history(history_id: int, request: Request):
  57. """删除一条历史记录"""
  58. user = require_auth(request)
  59. deleted = delete_trip_history(history_id, user["id"])
  60. if not deleted:
  61. raise HTTPException(status_code=404, detail="记录不存在")
  62. return {"success": True, "message": "删除成功"}