Skip to content

Commit 6a6c863

Browse files
authored
Merge pull request #662 from code0-tech/661-change-ref-value-to-follow-tucana
Change ref value to follow tucana
2 parents 6ef3ab4 + d0236ff commit 6a6c863

File tree

19 files changed

+64
-268
lines changed

19 files changed

+64
-268
lines changed

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ gem 'good_job', '~> 4.0'
7979
gem 'rotp'
8080

8181
gem 'grpc', '~> 1.67'
82-
gem 'tucana', '0.0.37'
82+
gem 'tucana', '0.0.40'
8383

8484
gem 'code0-identities', '~> 0.0.2'
8585

Gemfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ GEM
376376
thor (1.4.0)
377377
timeout (0.4.3)
378378
tsort (0.2.0)
379-
tucana (0.0.37)
379+
tucana (0.0.40)
380380
grpc (~> 1.64)
381381
tzinfo (2.0.6)
382382
concurrent-ruby (~> 1.0)
@@ -430,7 +430,7 @@ DEPENDENCIES
430430
simplecov (~> 0.22.0)
431431
simplecov-cobertura (~> 3.0)
432432
test-prof (~> 1.0)
433-
tucana (= 0.0.37)
433+
tucana (= 0.0.40)
434434
tzinfo-data
435435

436436
RUBY VERSION

app/graphql/types/input/reference_value_input_type.rb

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,10 @@ module Input
55
class ReferenceValueInputType < Types::BaseInputObject
66
description 'Input type for reference value'
77

8-
argument :data_type_identifier, Types::Input::DataTypeIdentifierInputType,
9-
required: true, description: 'The identifier of the data type this reference value belongs to'
10-
argument :primary_level, Int, required: true,
11-
description: 'The primary level of the reference value'
128
argument :reference_path, [Types::Input::ReferencePathInputType],
139
required: true, description: 'The paths associated with this reference value'
14-
argument :secondary_level, Int, required: true,
15-
description: 'The secondary level of the reference value'
16-
argument :tertiary_level, Int, required: false,
17-
description: 'The tertiary level of the reference value'
10+
11+
argument :node_function, GlobalIdType[::NodeFunction], required: true, description: 'The referenced value'
1812
end
1913
end
2014
end

app/graphql/types/reference_value_type.rb

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,7 @@ class ReferenceValueType < Types::BaseObject
66

77
authorize :read_flow
88

9-
field :data_type_identifier, Types::DataTypeIdentifierType,
10-
null: false, description: 'The identifier of the data type this reference value belongs to.'
11-
12-
# field :primary_level, Int, null: false, description: 'The primary level of the reference value.'
13-
# field :secondary_level, Int, null: false, description: 'The secondary level of the reference value.'
14-
# field :tertiary_level, Int, null: true, description: 'The tertiary level of the reference value, if applicable.'
15-
16-
field :depth, Int, null: false, description: 'The depth of the reference value.'
17-
field :node, Int, null: false, description: 'The node of the reference value.'
18-
field :scope, [Int], null: false, description: 'The scope of the reference value.'
9+
field :node_function, Types::NodeFunctionType, null: false, description: 'The referenced value.'
1910

2011
field :reference_path, [Types::ReferencePathType], null: false,
2112
description: 'The paths associated with this reference value.'

app/models/reference_value.rb

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
# frozen_string_literal: true
22

33
class ReferenceValue < ApplicationRecord
4-
belongs_to :data_type_identifier
4+
belongs_to :node_function # real value association
55
has_many :reference_paths, inverse_of: :reference_value
66
has_many :node_parameters, inverse_of: :reference_value
77

88
def to_grpc
99
Tucana::Shared::ReferenceValue.new(
10-
data_type_identifier: data_type_identifier.to_grpc,
11-
primary_level: primary_level,
12-
secondary_level: secondary_level,
13-
tertiary_level: tertiary_level,
14-
path: reference_paths.map(&:to_grpc)
10+
node_id: node_function.id,
11+
paths: reference_paths.map(&:to_grpc)
1512
)
1613
end
1714
end

app/services/namespaces/projects/flows/create_service.rb

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,28 @@ def create_node_function(node_function, t)
109109
next
110110
end
111111

112-
identifier = parameter.value.reference_value.data_type_identifier
112+
reference_value = SagittariusSchema.object_from_id(
113+
parameter.value.reference_value.node_id
114+
)
115+
116+
if reference_value.nil?
117+
t.rollback_and_return! ServiceResponse.error(
118+
message: 'Referenced node function not found',
119+
payload: :referenced_value_not_found
120+
)
121+
end
113122

114-
ReferenceValue.create(
115-
reference_value_id: parameter.value.reference_value.reference_value_id,
116-
data_type_identifier: get_data_type_identifier(identifier)
123+
params << NodeParameter.create(
124+
runtime_parameter: runtime_parameter,
125+
reference_value: ReferenceValue.create(
126+
node_function: reference_value,
127+
reference_paths: parameter.value.reference_value.reference_paths.map do |path|
128+
ReferencePath.create(
129+
path: path.path,
130+
array_index: path.array_index
131+
)
132+
end
133+
)
117134
)
118135
end
119136

@@ -126,28 +143,6 @@ def create_node_function(node_function, t)
126143
node_parameters: params
127144
)
128145
end
129-
130-
private
131-
132-
def get_data_type_identifier(identifier)
133-
return DataTypeIdentifier.create(generic_key: identifier.generic_key) if identifier.generic_key.present?
134-
135-
if identifier.generic_type.present?
136-
data_type = SagittariusSchema.object_from_id(identifier.generic_type.data_type_id)
137-
mappers = identifier.generic_type.mappers.map do |mapper|
138-
GenericMapper.create(
139-
generic_mapper_id: mapper.generic_mapper_id,
140-
source: mapper.source,
141-
target: mapper.target
142-
)
143-
end
144-
return DataTypeIdentifier.create(generic_type: GenericType.create(data_type: data_type, mappers: mappers))
145-
end
146-
147-
return if identifier.data_type_id.blank?
148-
149-
DataTypeIdentifier.create(data_type: SagittariusSchema.object_from_id(identifier.data_type_id))
150-
end
151146
end
152147
end
153148
end

app/services/namespaces/projects/flows/validation/node_function/reference_value_validation_service.rb

Lines changed: 2 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -18,75 +18,13 @@ def initialize(current_authentication, flow, node, reference_value)
1818
@reference_value = reference_value
1919
end
2020

21-
def find_primary_nodes(search_node, curr_primary, primary_level)
22-
found_node = nil
23-
search_node.node_parameters.each do |param|
24-
next if param.function_value.blank?
25-
26-
curr_primary += 1
27-
if curr_primary == primary_level
28-
found_node = param.function_value
29-
break
30-
end
31-
find_node = find_primary_nodes(param.function_value, curr_primary, primary_level)
32-
found_node = find_node[:found_node]
33-
break if found_node.present?
34-
end
35-
{
36-
found_node: found_node,
37-
new_primary: curr_primary,
38-
}
39-
end
40-
4121
def execute
4222
errors = []
43-
errors += Namespaces::Projects::Flows::Validation::DataType::DataTypeIdentifierValidationService.new(
44-
current_authentication,
45-
flow,
46-
node,
47-
reference_value.data_type_identifier
48-
).execute
49-
50-
primary_level = reference_value.primary_level
51-
curr_primary = 0
52-
node = flow.starting_node
53-
54-
while curr_primary < primary_level
55-
if node.nil?
56-
errors << ValidationResult.error(:primary_level_not_found)
57-
return errors
58-
end
59-
nodes = find_primary_nodes(node, curr_primary, primary_level)
60-
if nodes[:found_node].nil?
61-
curr_primary = nodes[:new_primary]
62-
else
63-
node = nodes[:found_node]
64-
break
65-
end
66-
67-
next_node = node.next_node
68-
node = next_node
69-
end
70-
71-
secondary_level = reference_value.secondary_level
72-
73-
curr_secondary = 0
74-
75-
while curr_secondary != secondary_level
76-
errors << ValidationResult.error(:secondary_level_not_found) if node.next_node.nil?
77-
next_node = node.next_node
78-
node = next_node
7923

80-
curr_secondary += 1
24+
unless reference_value.valid?
25+
errors << ValidationResult.error(:reference_value_invalid, reference_value.errors)
8126
end
8227

83-
return errors if reference_value.tertiary_level.nil?
84-
85-
tertiary_level = reference_value.tertiary_level
86-
87-
if tertiary_level >= node.node_parameters.count
88-
errors << ValidationResult.error(:tertiary_level_exceeds_parameters)
89-
end
9028
# https://github.com/code0-tech/sagittarius/issues/508 Validate the usage and datatypes
9129
errors
9230
end
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# frozen_string_literal: true
2+
3+
class SimplifyReferenceValue < Code0::ZeroTrack::Database::Migration[1.0]
4+
def change
5+
remove_reference :reference_values, :data_type_identifier, index: true
6+
7+
remove_column :reference_values, :primary_level, :integer
8+
remove_column :reference_values, :secondary_level, :integer
9+
remove_column :reference_values, :tertiary_level, :integer
10+
11+
# rubocop:disable Rails/NotNullColumn -- backwards compatibility intentionally ignored
12+
add_reference :reference_values, :node_function, null: false, foreign_key: {
13+
to_table: :node_functions, on_delete: :restrict
14+
}
15+
# rubocop:enable Rails/NotNullColumn
16+
end
17+
end
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
bd2f3d0149d31f419c48bcc360ceee06e48438e52e7e58e423630b2229c39e2b

db/structure.sql

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -660,12 +660,9 @@ ALTER SEQUENCE reference_paths_id_seq OWNED BY reference_paths.id;
660660

661661
CREATE TABLE reference_values (
662662
id bigint NOT NULL,
663-
data_type_identifier_id bigint NOT NULL,
664-
primary_level integer NOT NULL,
665-
secondary_level integer NOT NULL,
666-
tertiary_level integer,
667663
created_at timestamp with time zone NOT NULL,
668-
updated_at timestamp with time zone NOT NULL
664+
updated_at timestamp with time zone NOT NULL,
665+
node_function_id bigint NOT NULL
669666
);
670667

671668
CREATE SEQUENCE reference_values_id_seq
@@ -1200,7 +1197,7 @@ CREATE INDEX index_parameter_definitions_on_runtime_parameter_definition_id ON p
12001197

12011198
CREATE INDEX index_reference_paths_on_reference_value_id ON reference_paths USING btree (reference_value_id);
12021199

1203-
CREATE INDEX index_reference_values_on_data_type_identifier_id ON reference_values USING btree (data_type_identifier_id);
1200+
CREATE INDEX index_reference_values_on_node_function_id ON reference_values USING btree (node_function_id);
12041201

12051202
CREATE INDEX index_runtime_function_definitions_on_return_type_id ON runtime_function_definitions USING btree (return_type_id);
12061203

@@ -1330,6 +1327,9 @@ ALTER TABLE ONLY flows
13301327
ALTER TABLE ONLY node_functions
13311328
ADD CONSTRAINT fk_rails_8953e1d86a FOREIGN KEY (runtime_function_id) REFERENCES runtime_function_definitions(id) ON DELETE RESTRICT;
13321329

1330+
ALTER TABLE ONLY reference_values
1331+
ADD CONSTRAINT fk_rails_8b9d8f68cc FOREIGN KEY (node_function_id) REFERENCES node_functions(id) ON DELETE RESTRICT;
1332+
13331333
ALTER TABLE ONLY data_type_identifiers
13341334
ADD CONSTRAINT fk_rails_8d8385e8ec FOREIGN KEY (runtime_id) REFERENCES runtimes(id) ON DELETE CASCADE;
13351335

@@ -1354,9 +1354,6 @@ ALTER TABLE ONLY flow_type_settings
13541354
ALTER TABLE ONLY flows
13551355
ADD CONSTRAINT fk_rails_ab927e0ecb FOREIGN KEY (project_id) REFERENCES namespace_projects(id) ON DELETE CASCADE;
13561356

1357-
ALTER TABLE ONLY reference_values
1358-
ADD CONSTRAINT fk_rails_bb34a5d62c FOREIGN KEY (data_type_identifier_id) REFERENCES data_type_identifiers(id) ON DELETE RESTRICT;
1359-
13601357
ALTER TABLE ONLY flows
13611358
ADD CONSTRAINT fk_rails_bb587eff6a FOREIGN KEY (input_type_id) REFERENCES data_types(id) ON DELETE RESTRICT;
13621359

0 commit comments

Comments
 (0)