auth_api.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from fastapi import APIRouter, Request, Depends, HTTPException
  2. from fastapi.responses import JSONResponse
  3. from pydantic import BaseModel
  4. from typing import Optional
  5. from backend.services.auth_service import auth_service
  6. router = APIRouter()
  7. class RegisterRequest(BaseModel):
  8. username: str
  9. password: str
  10. is_admin: Optional[bool] = False
  11. class LoginRequest(BaseModel):
  12. username: str
  13. password: str
  14. class UpdateUserRequest(BaseModel):
  15. username: Optional[str] = None
  16. password: Optional[str] = None
  17. is_admin: Optional[bool] = None
  18. is_active: Optional[bool] = None
  19. @router.post("/register")
  20. def register(req: RegisterRequest):
  21. result = auth_service.register_user(req.username, req.password, req.is_admin)
  22. if not result["success"]:
  23. raise HTTPException(status_code=400, detail=result["error"])
  24. return result
  25. @router.post("/login")
  26. def login(req: LoginRequest):
  27. result = auth_service.login_user(req.username, req.password)
  28. if not result["success"]:
  29. raise HTTPException(status_code=401, detail=result["error"])
  30. return result
  31. @router.post("/logout")
  32. def logout(token: str):
  33. result = auth_service.logout_user(token)
  34. if not result["success"]:
  35. raise HTTPException(status_code=401, detail=result["error"])
  36. return result
  37. @router.get("/user/{user_id}")
  38. def get_user_info(user_id: int):
  39. result = auth_service.get_user_info(user_id)
  40. if not result["success"]:
  41. raise HTTPException(status_code=404, detail=result["error"])
  42. return result
  43. @router.put("/user/{user_id}")
  44. def update_user_info(user_id: int, req: UpdateUserRequest):
  45. result = auth_service.update_user_info(user_id, **req.dict(exclude_unset=True))
  46. if not result["success"]:
  47. raise HTTPException(status_code=400, detail=result["error"])
  48. return result
  49. @router.delete("/user/{user_id}")
  50. def delete_user(user_id: int):
  51. result = auth_service.delete_user(user_id)
  52. if not result["success"]:
  53. raise HTTPException(status_code=400, detail=result["error"])
  54. return result