@@ -20,6 +20,22 @@ def execute
2020 end
2121
2222 transactional do |t |
23+ settings = [ ]
24+ params [ :settings ] . each do |graphql_setting |
25+ setting = FlowSetting . new ( flow_setting_id : graphql_setting . flow_setting_id , object : graphql_setting . object )
26+ unless setting . valid?
27+ t . rollback_and_return! ServiceResponse . error (
28+ message : 'Invalid flow setting' ,
29+ payload : setting . errors
30+ )
31+ settings << setting
32+ end
33+ end
34+ params [ :settings ] = settings
35+
36+ node = create_node_function ( params [ :starting_node ] , t )
37+ params [ :starting_node ] = node
38+
2339 flow = Flow . create ( project : namespace_project , **params )
2440 unless flow . persisted?
2541 t . rollback_and_return! ServiceResponse . error (
@@ -50,6 +66,86 @@ def execute
5066 ServiceResponse . success ( message : 'Created new project' , payload : flow )
5167 end
5268 end
69+
70+ def create_node_function ( node_function , t )
71+ runtime_function_definition = SagittariusSchema . object_from_id ( node_function . runtime_function_id )
72+ if runtime_function_definition . nil?
73+ t . rollback_and_return! ServiceResponse . error (
74+ message : 'Invalid runtime function id' ,
75+ payload : :invalid_runtime_function_id
76+ )
77+ end
78+
79+ params = [ ]
80+ node_function . parameters . each do |parameter |
81+ runtime_parameter = SagittariusSchema . object_from_id ( parameter . runtime_parameter_definition_id )
82+ if runtime_parameter . nil?
83+ t . rollback_and_return! ServiceResponse . error (
84+ message : 'Invalid runtime parameter id' ,
85+ payload : :invalid_runtime_parameter_id
86+ )
87+ end
88+ if parameter . literal_value . present?
89+ params << NodeParameter . create (
90+ runtime_parameter : runtime_parameter ,
91+ literal_value : parameter . literal_value ,
92+ )
93+ next
94+ end
95+ if parameter . function_value . present?
96+ params << NodeParameter . create (
97+ runtime_parameter : runtime_parameter ,
98+ function_value : create_node_function ( parameter . function_value , t ) ,
99+ )
100+ next
101+ end
102+ if parameter . reference_value . present?
103+ identifier = parameter . reference_value . data_type_identifier
104+
105+ ReferenceValue . create (
106+ reference_value_id : parameter . reference_value . reference_value_id ,
107+ data_type_identifier : get_data_type_identifier ( identifier ) ,
108+ )
109+ end
110+
111+ end
112+
113+ next_node = nil
114+ if node_function . next_node . present?
115+ next_node = create_node_function ( node_function . next_node , t )
116+ end
117+
118+
119+ NodeFunction . create (
120+ next_node : next_node ,
121+ runtime_function_definition : runtime_function_definition ,
122+ parameters : params
123+ )
124+ end
125+
126+ private
127+
128+ def get_data_type_identifier ( identifier )
129+ if identifier . generic_key . present?
130+ return DataTypeIdentifier . create ( generic_key : identifier . generic_key )
131+ end
132+
133+ if identifier . generic_type . present?
134+ data_type = SagittariusSchema . object_from_id ( identifier . generic_type . data_type_id )
135+ mappers = identifier . generic_type . mappers . map do |mapper |
136+ GenericMapper . create (
137+ generic_mapper_id : mapper . generic_mapper_id ,
138+ source : mapper . source ,
139+ target : mapper . target
140+ )
141+ end
142+ return DataTypeIdentifier . create ( generic_type : GenericType . create ( data_type : data_type , mappers : mappers ) )
143+ end
144+
145+ if identifier . data_type_id . present?
146+ return DataTypeIdentifier . create ( data_type : SagittariusSchema . object_from_id ( identifier . data_type_id ) )
147+ end
148+ end
53149 end
54150 end
55151 end
0 commit comments