account_router.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from fastapi import APIRouter, Request
  2. from starlette.responses import JSONResponse, FileResponse
  3. from core.current_user import CurrentUserProvider
  4. from core.decorators import LoginLog, Authorize, OperationLog
  5. from core.enums import BusinessTypeEnum
  6. from domain.services import SysUserService, get_user_service
  7. account_router = APIRouter(prefix="/account", tags=["用户账户管理"])
  8. @account_router.post("/login", summary="用户登录")
  9. @LoginLog("用户登录")
  10. async def login(request: Request, user_service: SysUserService = get_user_service()):
  11. data = await request.json()
  12. username = data.get("username")
  13. password = data.get("password")
  14. await user_service.login(username, password)
  15. @account_router.post("/logout", summary="用户登出")
  16. @LoginLog("用户登出")
  17. @Authorize()
  18. async def logout(request: Request):
  19. request.state.user_id = None
  20. await CurrentUserProvider.clear_current_user()
  21. # @router.post("/register", summary="用户注册")
  22. # @LoginLog("用户注册")
  23. # async def register(request: Request, user_service: SysUserService = get_user_service()):
  24. # data = await request.json()
  25. # username = data.get("username")
  26. # password = data.get("password")
  27. # await user_service.register(username, password)
  28. @account_router.post("/update-password", summary="更新用户密码")
  29. @OperationLog("更新用户密码", business_type=BusinessTypeEnum.UPDATE)
  30. @Authorize()
  31. async def update_password(
  32. request: Request, user_service: SysUserService = get_user_service()
  33. ):
  34. data = await request.json()
  35. current_user = CurrentUserProvider.get_current_user()
  36. old_password = data.get("old_password")
  37. new_password = data.get("new_password")
  38. await user_service.change_password(current_user.user_id, old_password, new_password)
  39. @account_router.get("/test/{id:int}", summary="TEST")
  40. async def test(request: Request):
  41. id = int(request.path_params.get("id"))
  42. from utils import ResponseUtil
  43. import os
  44. if id >= 10:
  45. return {"id_10": id}
  46. elif id >= 9:
  47. return JSONResponse(content={"id_9": id})
  48. elif id >= 8:
  49. return ResponseUtil.success(data={"id_8": id})
  50. elif id >= 7:
  51. return ResponseUtil.error()
  52. elif id >= 6:
  53. return ResponseUtil.failure()
  54. elif id >= 5:
  55. return ResponseUtil.forbidden()
  56. elif id >= 4:
  57. return ResponseUtil.unauthorized()
  58. elif id >= 3:
  59. return ResponseUtil.json({"id_json": id})
  60. elif id >= 2:
  61. base_dir = os.path.dirname(os.path.abspath(__file__))
  62. print(f"base_dir:{base_dir}")
  63. # 修改路径构建逻辑,使用绝对路径定位
  64. project_root = os.path.dirname(
  65. os.path.dirname(base_dir)
  66. ) # 上两级定位到项目根目录
  67. print(f"project_root:{project_root}")
  68. image_path = os.path.join(
  69. project_root, "vapy_admin", "download_files", "300_7.jpg"
  70. )
  71. print(f"image_path:{image_path}")
  72. return FileResponse(image_path, media_type="image/jpeg") # 返回图片文件
  73. elif id >= 1:
  74. return str(id)
  75. else:
  76. return None
  77. # 新增路由来返回图片文件
  78. @account_router.get("/image", summary="返回图片文件")
  79. async def get_image():
  80. image_path = "BACKEND/vapy_admin/download_files/300_7.jpg" # 图片文件路径
  81. return FileResponse(image_path, media_type="image/jpeg") # 返回图片文件