Files
shanxia2.0/backend/app/api/public_duty.py
T
2026-08-16 14:58:19 +08:00

38 lines
1.3 KiB
Python

"""值班排班 · 公开抢班 API(免登录)"""
from __future__ import annotations
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from app.core.database import get_db
from app.core.response import error_response, success_response
from app.schemas.duty import DutyGrabBody
from app.services import duty_schedule as duty_svc
from app.services.duty_schedule import DutyBizError
router = APIRouter(prefix="/public/duty", tags=["值班排班-公开"])
@router.get("/{token}")
def public_page(token: str, db: Session = Depends(get_db)):
try:
data = duty_svc.get_public_page(db, token)
return success_response(data)
except DutyBizError as exc:
msg = str(exc)
if "无效" in msg:
raise HTTPException(status_code=404, detail=msg)
return error_response(400, msg)
@router.post("/{token}/grab")
def public_grab(token: str, body: DutyGrabBody, db: Session = Depends(get_db)):
try:
data = duty_svc.grab(db, token, body.shiftType, body.userId)
return success_response(data, message="报名成功")
except DutyBizError as exc:
msg = str(exc)
if "无效" in msg:
raise HTTPException(status_code=404, detail=msg)
return error_response(400, msg)