38 lines
1.3 KiB
Python
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)
|