public_duty.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. """值班排班 · 公开抢班 API(免登录)"""
  2. from __future__ import annotations
  3. from fastapi import APIRouter, Depends, HTTPException
  4. from sqlalchemy.orm import Session
  5. from app.core.database import get_db
  6. from app.core.response import error_response, success_response
  7. from app.schemas.duty import DutyGrabBody
  8. from app.services import duty_schedule as duty_svc
  9. from app.services.duty_schedule import DutyBizError
  10. router = APIRouter(prefix="/public/duty", tags=["值班排班-公开"])
  11. @router.get("/{token}")
  12. def public_page(token: str, db: Session = Depends(get_db)):
  13. try:
  14. data = duty_svc.get_public_page(db, token)
  15. return success_response(data)
  16. except DutyBizError as exc:
  17. msg = str(exc)
  18. if "无效" in msg:
  19. raise HTTPException(status_code=404, detail=msg)
  20. return error_response(400, msg)
  21. @router.post("/{token}/grab")
  22. def public_grab(token: str, body: DutyGrabBody, db: Session = Depends(get_db)):
  23. try:
  24. data = duty_svc.grab(db, token, body.shiftType, body.userId)
  25. return success_response(data, message="报名成功")
  26. except DutyBizError as exc:
  27. msg = str(exc)
  28. if "无效" in msg:
  29. raise HTTPException(status_code=404, detail=msg)
  30. return error_response(400, msg)