@@ -7,12 +7,12 @@ class CreateService
77 include Sagittarius ::Database ::Transactional
88 include FlowServiceHelper
99
10- attr_reader :current_authentication , :namespace_project , :params
10+ attr_reader :current_authentication , :namespace_project , :flow_input
1111
12- def initialize ( current_authentication , namespace_project :, ** params )
12+ def initialize ( current_authentication , namespace_project :, flow_input : )
1313 @current_authentication = current_authentication
1414 @namespace_project = namespace_project
15- @params = params
15+ @flow_input = flow_input
1616 end
1717
1818 def execute
@@ -26,53 +26,29 @@ def execute
2626 error_code : :no_primary_runtime
2727 )
2828 end
29-
3029 transactional do |t |
31- settings = [ ]
32- if params . key? ( :flow_settings )
33- params [ :flow_settings ] . each do |graphql_setting |
34- setting = FlowSetting . new ( flow_setting_id : graphql_setting . flow_setting_identifier ,
35- object : graphql_setting . value )
36- if setting . invalid?
37- t . rollback_and_return! ServiceResponse . error (
38- message : 'Invalid flow setting' ,
39- error_code : :invalid_flow_setting ,
40- details : setting . errors
41- )
42- end
43-
44- settings << setting
45- end
46- params [ :flow_settings ] = settings
47- end
48-
49- if params . key? ( :starting_node_id )
50- params [ :starting_node ] = create_node_function ( params [ :starting_node_id ] , params [ :nodes ] , t )
51-
52- params . delete ( :starting_node_id )
53- params . delete ( :nodes )
54- end
30+ flow_type = FlowType . find_by ( id : flow_input . type . model_id , runtime_id : namespace_project . primary_runtime . id )
5531
56- flow = Flow . create ( project : namespace_project , **params )
57- unless flow . persisted?
32+ if flow_type . nil?
5833 t . rollback_and_return! ServiceResponse . error (
59- message : 'Failed to create flow' ,
60- error_code : :invalid_flow ,
61- details : flow . errors
34+ message : 'Invalid flow type for the project runtime' ,
35+ error_code : :invalid_flow_type
6236 )
6337 end
6438
65- res = Validation ::ValidationService . new ( current_authentication , flow ) . execute
66-
67- if res . error?
68- t . rollback_and_return! ServiceResponse . error (
69- message : 'Flow validation failed' ,
70- error_code : :flow_validation_failed ,
71- details : res . payload
72- )
73- end
39+ flow = Flow . new (
40+ project : namespace_project ,
41+ name : flow_input . name ,
42+ flow_type : flow_type ,
43+ input_type : flow_type . input_type ,
44+ return_type : flow_type . return_type
45+ )
7446
75- UpdateRuntimesForProjectJob . perform_later ( namespace_project . id )
47+ UpdateService . new (
48+ current_authentication ,
49+ flow ,
50+ flow_input
51+ ) . update_flow ( t )
7652
7753 AuditService . audit (
7854 :flow_created ,
@@ -87,98 +63,6 @@ def execute
8763 ServiceResponse . success ( message : 'Created new flow' , payload : flow )
8864 end
8965 end
90-
91- def create_node_function ( node_function_id , input_nodes , t )
92- node_function = input_nodes . find { |n | n . id == node_function_id }
93-
94- runtime_function_definition = namespace_project . primary_runtime . runtime_function_definitions . find_by (
95- id : node_function . runtime_function_id . model_id
96- )
97- if runtime_function_definition . nil?
98- t . rollback_and_return! ServiceResponse . error (
99- message : 'Invalid runtime function id' ,
100- error_code : :invalid_runtime_function_id
101- )
102- end
103-
104- params = [ ]
105- node_function . parameters . each do |parameter |
106- runtime_parameter = runtime_function_definition . parameters . find_by (
107- id : parameter . runtime_parameter_definition_id . model_id
108- )
109- if runtime_parameter . nil?
110- t . rollback_and_return! ServiceResponse . error (
111- message : 'Invalid runtime parameter id' ,
112- error_code : :invalid_runtime_parameter_id
113- )
114- end
115-
116- if parameter . value . literal_value . present?
117- params << NodeParameter . create (
118- runtime_parameter : runtime_parameter ,
119- literal_value : parameter . value . literal_value
120- )
121- next
122- end
123- if parameter . value . function_value . present?
124- # A little bit hacky but okay
125- params << NodeParameter . create (
126- runtime_parameter : runtime_parameter ,
127- function_value : create_node_function (
128- parameter . value . function_value . id ,
129- [ parameter . value . function_value ] , t
130- )
131- )
132- next
133- end
134-
135- # This will be broken, because we cant reference nodes that arent created yet
136- # And we will need to put all parameter nodes inside the flowinput.nodes
137- # So we can reference them here because we will not recursively search for them
138- referenced_node = NodeFunction . joins ( :runtime_function ) . find_by (
139- id : parameter . value . reference_value . node_function_id . model_id ,
140- runtime_function_definitions : { runtime_id : namespace_project . primary_runtime . id }
141- )
142-
143- if referenced_node . nil?
144- t . rollback_and_return! ServiceResponse . error (
145- message : 'Referenced node function not found' ,
146- error_code : :referenced_value_not_found
147- )
148- end
149-
150- params << NodeParameter . create (
151- runtime_parameter : runtime_parameter ,
152- reference_value : ReferenceValue . create (
153- node_function : referenced_node ,
154- data_type_identifier : get_data_type_identifier (
155- namespace_project . primary_runtime ,
156- parameter . value . reference_value . data_type_identifier ,
157- t
158- ) ,
159- depth : parameter . value . reference_value . depth ,
160- node : parameter . value . reference_value . node ,
161- scope : parameter . value . reference_value . scope ,
162- reference_paths : parameter . value . reference_value . reference_paths . map do |path |
163- ReferencePath . create (
164- path : path . path ,
165- array_index : path . array_index
166- )
167- end
168- )
169- )
170- end
171-
172- next_node = if node_function . next_node_id . present?
173- create_node_function ( node_function . next_node_id , input_nodes , t )
174- end
175-
176- NodeFunction . create (
177- next_node : next_node ,
178- runtime_function : runtime_function_definition ,
179- node_parameters : params
180- )
181- end
18266 end
18367 end
18468 end
0 commit comments