Files
my-v0-server/app/actions/registry.py
T

32 lines
1.1 KiB
Python

"""按动作 type 分配处理器,统一提供大屏 JSON 副本的执行入口"""
from typing import Any
from app.actions.add import AddHandler
from app.actions.base import BaseActionHandler
from app.actions.delete import DeleteHandler
from app.actions.move import MoveHandler
from app.actions.resize import ResizeHandler
from app.actions.update import UpdateHandler
from app.actions.update_canvas import UpdateCanvasHandler
from app.schemas.actions import Action
from app.schemas.screen import Screen
# 新增操作时在此注册,未实现的操作明确报错
ACTION_HANDLERS: dict[str, BaseActionHandler[Any]] = {
"delete": DeleteHandler(),
"add": AddHandler(),
"move": MoveHandler(),
"resize": ResizeHandler(),
"update": UpdateHandler(),
"update_canvas": UpdateCanvasHandler(),
}
def apply_action(screen: Screen, action: Action) -> Screen:
"""接收已通过 Schema 校验的动作,返回修改后的大屏副本,不保存或更新前端"""
handler = ACTION_HANDLERS.get(action.type)
if handler is None:
raise ValueError(f"尚未实现动作处理器: {action.type}")
return handler.apply(screen, action)