users.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. """
  2. 用户相关API路由
  3. """
  4. from fastapi import APIRouter, HTTPException
  5. from typing import Dict, Any, Optional
  6. from pydantic import BaseModel
  7. import logging
  8. import uuid
  9. # from ...core.database import db_manager
  10. # 临时注释,避免相对导入错误
  11. db_manager = None
  12. logger = logging.getLogger(__name__)
  13. router = APIRouter()
  14. # Pydantic模型
  15. class UserCreateRequest(BaseModel):
  16. email: str
  17. profile: Optional[Dict[str, Any]] = {}
  18. class UserUpdateRequest(BaseModel):
  19. profile: Optional[Dict[str, Any]] = {}
  20. class UserResponse(BaseModel):
  21. id: str
  22. email: str
  23. profile: Dict[str, Any]
  24. created_at: str
  25. @router.post("/", response_model=UserResponse)
  26. async def create_user(request: UserCreateRequest):
  27. """创建用户"""
  28. try:
  29. user_id = await db_manager.create_user(
  30. email=request.email,
  31. profile=request.profile
  32. )
  33. user = await db_manager.get_user(user_id)
  34. return UserResponse(
  35. id=user["id"],
  36. email=user["email"],
  37. profile=user["profile"],
  38. created_at=user["created_at"].isoformat() if user["created_at"] else ""
  39. )
  40. except Exception as e:
  41. logger.error(f"创建用户失败: {str(e)}")
  42. raise HTTPException(status_code=500, detail=str(e))
  43. @router.get("/{user_id}", response_model=UserResponse)
  44. async def get_user(user_id: str):
  45. """获取用户信息"""
  46. try:
  47. user = await db_manager.get_user(user_id)
  48. if not user:
  49. raise HTTPException(status_code=404, detail="用户不存在")
  50. return UserResponse(
  51. id=user["id"],
  52. email=user["email"],
  53. profile=user["profile"],
  54. created_at=user["created_at"].isoformat() if user["created_at"] else ""
  55. )
  56. except HTTPException:
  57. raise
  58. except Exception as e:
  59. logger.error(f"获取用户信息失败: {str(e)}")
  60. raise HTTPException(status_code=500, detail=str(e))
  61. @router.put("/{user_id}", response_model=Dict[str, Any])
  62. async def update_user(user_id: str, request: UserUpdateRequest):
  63. """更新用户信息"""
  64. try:
  65. success = await db_manager.update_user_profile(
  66. user_id=user_id,
  67. profile=request.profile
  68. )
  69. if success:
  70. return {"success": True, "message": "用户信息已更新"}
  71. else:
  72. raise HTTPException(status_code=404, detail="用户不存在")
  73. except HTTPException:
  74. raise
  75. except Exception as e:
  76. logger.error(f"更新用户信息失败: {str(e)}")
  77. raise HTTPException(status_code=500, detail=str(e))
  78. @router.get("/{user_id}/profile")
  79. async def get_user_profile(user_id: str):
  80. """获取用户配置"""
  81. try:
  82. user = await db_manager.get_user(user_id)
  83. if not user:
  84. raise HTTPException(status_code=404, detail="用户不存在")
  85. return {
  86. "success": True,
  87. "profile": user.get("profile", {})
  88. }
  89. except HTTPException:
  90. raise
  91. except Exception as e:
  92. logger.error(f"获取用户配置失败: {str(e)}")
  93. raise HTTPException(status_code=500, detail=str(e))
  94. @router.post("/{user_id}/profile")
  95. async def update_user_profile(user_id: str, profile: Dict[str, Any]):
  96. """更新用户配置"""
  97. try:
  98. success = await db_manager.update_user_profile(
  99. user_id=user_id,
  100. profile=profile
  101. )
  102. if success:
  103. return {"success": True, "message": "用户配置已更新"}
  104. else:
  105. raise HTTPException(status_code=404, detail="用户不存在")
  106. except HTTPException:
  107. raise
  108. except Exception as e:
  109. logger.error(f"更新用户配置失败: {str(e)}")
  110. raise HTTPException(status_code=500, detail=str(e))