feat: settings, delete port validation
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user