feat: settings, delete port validation

This commit is contained in:
TheNoxium
2025-11-15 16:00:05 +05:00
parent 46091380ba
commit 0330356ea2
11 changed files with 140 additions and 304 deletions

View File

@@ -7,12 +7,12 @@ from api.db.logic.process_schema import (
get_process_schema_page_DTO,
update_process_schema_by_id,
create_process_schema,
update_process_schema_settings_by_id,
)
from api.db.logic.ps_node import create_ps_node_schema
from api.schemas.process.process_schema import ProcessSchema, ProcessSchemaSettingsNode
from api.db.logic.ps_node import create_ps_node_schema, get_all_ps_nodes_by_ps_id
from api.db.logic.node_link import get_all_node_links_by_next_node_ids
from api.schemas.process.process_schema import ProcessSchema, ProcessSchemaResponse
from api.schemas.endpoints.process_schema import AllProcessSchemaResponse, ProcessSchemaFilterDTO, ProcessSchemaUpdate
from api.schemas.process.ps_node import Ps_NodeFrontResponse, Ps_NodeFrontResponseNode
from api.schemas.process.ps_node import Ps_NodeFrontResponse
from orm.tables.process import NodeType
from core import VorkNodeRegistry
from model_nodes import ListenNodeData
@@ -31,11 +31,40 @@ class ProcessSchemaService:
"""
return await get_process_schema_page_DTO(self.connection, filter_dto)
async def get(self, process_schema_id: int) -> Optional[ProcessSchema]:
async def get(self, process_schema_id: int) -> Optional[ProcessSchemaResponse]:
"""
Получает схему процесса по ID.
Получает схему процесса по ID со всеми нодами и линками.
"""
return await get_process_schema_by_id(self.connection, process_schema_id)
process_schema = await get_process_schema_by_id(self.connection, process_schema_id)
if process_schema is None:
return None
nodes = await get_all_ps_nodes_by_ps_id(self.connection, process_schema_id)
node_ids = [node.id for node in nodes]
all_links = await get_all_node_links_by_next_node_ids(self.connection, node_ids)
links_by_node_id = {}
for link in all_links:
if link.next_node_id not in links_by_node_id:
links_by_node_id[link.next_node_id] = []
links_by_node_id[link.next_node_id].append(link)
nodes_response = []
for node in nodes:
node_links = links_by_node_id.get(node.id, [])
links_list = [{"link": link.model_dump()} for link in node_links]
ps_node_front_response = Ps_NodeFrontResponse(
node=node.model_dump(),
link=links_list,
)
nodes_response.append(ps_node_front_response)
return ProcessSchemaResponse(
process_schema=process_schema,
nodes=nodes_response,
)
async def create(self, creator_id: int) -> Dict[str, Any]:
"""
@@ -63,35 +92,27 @@ class ProcessSchemaService:
validated_start_schema = start_node.validate()
db_start_schema = await create_ps_node_schema(self.connection, validated_start_schema, creator_id)
node = ProcessSchemaSettingsNode(
id=db_start_schema.id,
node_type=NodeType.LISTEN.value,
data=validated_start_schema.data.model_dump(),
from_node=None,
links=None,
)
settings_dict = {"node": node.model_dump(mode="json")}
await update_process_schema_settings_by_id(self.connection, process_schema_new.id, settings_dict)
process_schema_new = await get_process_schema_by_id(self.connection, node_id)
ps_node_front_response = Ps_NodeFrontResponse(
description=node_descriptor.model_dump(),
node=Ps_NodeFrontResponseNode(
id=db_start_schema.id, node_type=NodeType.LISTEN.value, data=validated_start_schema.data.model_dump()
),
link=None,
)
response_data = {
"process_schema": process_schema_new.model_dump(),
"node_listen": ps_node_front_response.model_dump(),
start_settings_payload = {
**node_descriptor.model_dump(),
**validated_start_schema.data.model_dump(),
}
db_start_schema = await create_ps_node_schema(
self.connection,
validated_start_schema,
node_descriptor,
creator_id,
start_settings_payload,
)
ps_node_front_response = Ps_NodeFrontResponse(
node=db_start_schema.model_dump(),
link=[],
)
response_data = {
"process_schema": process_schema_new.model_dump(),
"nodes": [ps_node_front_response], # Список объектов, а не словарей
}
return response_data
async def update(self, process_schema_id: int, update_data: dict, process_schema: ProcessSchema) -> ProcessSchema: