utils.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from fastapi import APIRouter, HTTPException, Depends
  2. from sqlalchemy.orm import Session
  3. from pydantic import BaseModel
  4. from app.api.v1 import deps
  5. from app.services.captcha_service import CaptchaService
  6. from app.services.sms_service import SmsService
  7. from app.models.user import User, UserRole, UserStatus
  8. from app.core import security
  9. router = APIRouter()
  10. class CaptchaResponse(BaseModel):
  11. captcha_id: str
  12. image: str
  13. expire_seconds: int
  14. class SystemStatus(BaseModel):
  15. initialized: bool
  16. class SetupAdminRequest(BaseModel):
  17. mobile: str
  18. sms_code: str
  19. password: str
  20. @router.get("/captcha", response_model=CaptchaResponse, summary="获取验证码")
  21. def get_captcha():
  22. """
  23. 生成新的图形验证码。
  24. """
  25. try:
  26. return CaptchaService.generate_captcha()
  27. except Exception as e:
  28. raise HTTPException(status_code=500, detail=str(e))
  29. @router.get("/init-status", response_model=SystemStatus, summary="获取初始化状态")
  30. def get_init_status(db: Session = Depends(deps.get_db)):
  31. """
  32. 检查系统是否已初始化(是否存在用户)。
  33. """
  34. user = db.query(User).first()
  35. return {"initialized": bool(user)}
  36. @router.post("/setup-admin", summary="设置超级管理员")
  37. def setup_admin(
  38. req: SetupAdminRequest,
  39. db: Session = Depends(deps.get_db)
  40. ):
  41. """
  42. 创建第一个超级管理员用户。仅在系统无用户时可用。
  43. """
  44. # 1. Check if already initialized
  45. if db.query(User).first():
  46. raise HTTPException(status_code=400, detail="系统已初始化")
  47. # 2. Verify SMS
  48. if not SmsService.verify_code(req.mobile, req.sms_code):
  49. raise HTTPException(status_code=400, detail="短信验证码无效")
  50. # 3. Create Admin User
  51. db_user = User(
  52. mobile=req.mobile,
  53. password_hash=security.get_password_hash(req.password),
  54. status=UserStatus.ACTIVE,
  55. role=UserRole.SUPER_ADMIN
  56. )
  57. db.add(db_user)
  58. db.commit()
  59. return {"message": "超级管理员创建成功"}