Files
connect/api/api/services/endpoints/ps_node.py
2025-11-15 16:00:05 +05:00

66 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from typing import List, Dict, Any
from sqlalchemy.ext.asyncio import AsyncConnection
from api.db.logic.ps_node import (
get_nodes_for_deletion_ordered,
delete_ps_nodes_delete_handler,
create_ps_node_schema,
)
from api.db.logic.node_link import get_last_link_name_by_node_id, create_node_link_schema
from api.schemas.process.ps_node import Ps_NodeFrontResponse
from core import VorkNodeRegistry, VorkNodeLink
from model_nodes import VorkNodeLinkData
class PsNodeService:
"""Сервис для работы с ps nodes"""
def __init__(self, connection: AsyncConnection):
self.connection = connection
async def delete(self, next_node_id: int) -> Dict[str, List[int]]:
"""
Удаляет ноды в правильном порядке.
"""
ordered_node_ids = await get_nodes_for_deletion_ordered(self.connection, next_node_id)
deleted_node_ids = await delete_ps_nodes_delete_handler(self.connection, ordered_node_ids)
return {
"deleted_node_ids": deleted_node_ids,
}
async def create(
self, ps_node_data: Dict[str, Any], links: Dict[str, Any], creator_id: int
) -> Ps_NodeFrontResponse:
"""
Создаёт новую ноду с линком и обновляет настройки схемы процесса.
"""
registery = VorkNodeRegistry()
vork_node = registery.get(ps_node_data["node_type"])
node_descriptor = vork_node.form()
node_instance = vork_node(data=ps_node_data, links=links)
node_instance_validated = node_instance.validate()
db_ps_node = await create_ps_node_schema(self.connection, node_instance_validated, node_descriptor, creator_id)
link_name = await get_last_link_name_by_node_id(self.connection, db_ps_node.ps_id)
link_data = VorkNodeLinkData(
parent_port_number=node_instance_validated.parent_port_number,
to_id=db_ps_node.id,
from_id=node_instance_validated.parent_id,
last_link_name=link_name,
)
link = VorkNodeLink(data=link_data.model_dump())
validated_link = link.validate()
db_node_link = await create_node_link_schema(self.connection, validated_link, creator_id)
ps_node_front_response = Ps_NodeFrontResponse(
node=db_ps_node.model_dump(),
link=[{"link": db_node_link.model_dump()}],
)
return ps_node_front_response