42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
"""分身接管配置 API"""
|
|
from fastapi import APIRouter, Depends, Body
|
|
from sqlalchemy.orm import Session
|
|
|
|
from database import get_db
|
|
from models import Authorization
|
|
from responses import ok, fail
|
|
|
|
router = APIRouter(tags=["分身接管"])
|
|
|
|
|
|
@router.put("/avatar/{avatar_id}/authorizations/takeover")
|
|
def update_takeover_config(
|
|
avatar_id: str,
|
|
payload: dict = Body(...),
|
|
db: Session = Depends(get_db),
|
|
):
|
|
"""更新分身接管配置"""
|
|
auth_id = payload.get("authorizationId") or payload.get("authorization_id")
|
|
if not auth_id:
|
|
return fail("缺少 authorization_id", 400)
|
|
|
|
auth = db.query(Authorization).filter(Authorization.id == auth_id).first()
|
|
if not auth:
|
|
return fail("授权不存在", 404)
|
|
|
|
if "takeover_enabled" in payload:
|
|
auth.takeover_enabled = payload["takeover_enabled"]
|
|
if "takeover_mode" in payload:
|
|
mode = payload["takeover_mode"]
|
|
if mode not in ("immediate", "delayed"):
|
|
return fail("takeover_mode 必须是 immediate 或 delayed", 400)
|
|
auth.takeover_mode = mode
|
|
if "takeover_delay_seconds" in payload:
|
|
delay = payload["takeover_delay_seconds"]
|
|
if not isinstance(delay, int) or delay < 5:
|
|
return fail("takeover_delay_seconds 必须 >= 5", 400)
|
|
auth.takeover_delay_seconds = delay
|
|
|
|
db.commit()
|
|
return ok(auth.to_dict())
|