Skip to content

Commit beb9116

Browse files
authored
Merge pull request #692 from code0-tech/691-graphql-reference-value-should-contain-depth-node-and-scope
Add depth node scope
2 parents 6dff436 + 751d826 commit beb9116

File tree

14 files changed

+122
-6
lines changed

14 files changed

+122
-6
lines changed

app/graphql/types/input/reference_value_input_type.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,14 @@ class ReferenceValueInputType < Types::BaseInputObject
88
argument :reference_path, [Types::Input::ReferencePathInputType],
99
required: true, description: 'The paths associated with this reference value'
1010

11-
argument :node_function, GlobalIdType[::NodeFunction], required: true, description: 'The referenced value'
11+
argument :node_function_id, GlobalIdType[::NodeFunction], required: true, description: 'The referenced value'
12+
13+
argument :data_type_identifier, Types::Input::DataTypeIdentifierInputType,
14+
required: true, description: 'The identifier of the data type this reference value belongs to'
15+
16+
argument :depth, Int, required: true, description: 'The depth of the reference value'
17+
argument :node, Int, required: true, description: 'The node of the reference'
18+
argument :scope, [Int], required: true, description: 'The scope of the reference value'
1219
end
1320
end
1421
end

app/graphql/types/reference_value_type.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,14 @@ class ReferenceValueType < Types::BaseObject
66

77
authorize :read_flow
88

9-
field :node_function, Types::NodeFunctionType, null: false, description: 'The referenced value.'
9+
field :node_function_id, GlobalIdType[::NodeFunction], null: false, description: 'The referenced value.'
10+
11+
field :data_type_identifier, Types::DataTypeIdentifierType,
12+
null: false, description: 'The identifier of the data type this reference value belongs to.'
13+
14+
field :depth, Int, null: false, description: 'The depth of the reference value.'
15+
field :node, Int, null: false, description: 'The node of the reference value.'
16+
field :scope, [Int], null: false, description: 'The scope of the reference value.'
1017

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

app/models/reference_value.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
class ReferenceValue < ApplicationRecord
44
belongs_to :node_function # real value association
5+
belongs_to :data_type_identifier
56
has_many :reference_paths, inverse_of: :reference_value
67
has_many :node_parameters, inverse_of: :reference_value
78

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

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def create_node_function(node_function, t)
110110
end
111111

112112
reference_value = SagittariusSchema.object_from_id(
113-
parameter.value.reference_value.node_id
113+
parameter.value.reference_value.node_function_id
114114
)
115115

116116
if reference_value.nil?
@@ -124,6 +124,10 @@ def create_node_function(node_function, t)
124124
runtime_parameter: runtime_parameter,
125125
reference_value: ReferenceValue.create(
126126
node_function: reference_value,
127+
data_type_identifier: get_data_type_identifier(parameter.value.reference_value.data_type_identifier),
128+
depth: parameter.value.reference_value.depth,
129+
node: parameter.value.reference_value.node,
130+
scope: parameter.value.reference_value.scope,
127131
reference_paths: parameter.value.reference_value.reference_paths.map do |path|
128132
ReferencePath.create(
129133
path: path.path,
@@ -143,6 +147,28 @@ def create_node_function(node_function, t)
143147
node_parameters: params
144148
)
145149
end
150+
151+
private
152+
153+
def get_data_type_identifier(identifier)
154+
return DataTypeIdentifier.create(generic_key: identifier.generic_key) if identifier.generic_key.present?
155+
156+
if identifier.generic_type.present?
157+
data_type = SagittariusSchema.object_from_id(identifier.generic_type.data_type_id)
158+
mappers = identifier.generic_type.mappers.map do |mapper|
159+
GenericMapper.create(
160+
generic_mapper_id: mapper.generic_mapper_id,
161+
source: mapper.source,
162+
target: mapper.target
163+
)
164+
end
165+
return DataTypeIdentifier.create(generic_type: GenericType.create(data_type: data_type, mappers: mappers))
166+
end
167+
168+
return if identifier.data_type_id.blank?
169+
170+
DataTypeIdentifier.create(data_type: SagittariusSchema.object_from_id(identifier.data_type_id))
171+
end
146172
end
147173
end
148174
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# frozen_string_literal: true
2+
3+
class AddDepthNodeScopeToRefValues < Code0::ZeroTrack::Database::Migration[1.0]
4+
def change
5+
add_column :reference_values, :depth, :integer, null: false, default: 0
6+
add_column :reference_values, :node, :integer, null: false, default: 0
7+
add_column :reference_values, :scope, :integer, array: true, null: false, default: []
8+
9+
# rubocop:disable Rails/NotNullColumn -- backwards compatibility intentionally ignored
10+
add_reference :reference_values, :data_type_identifier, null: false, foreign_key: {
11+
to_table: :data_type_identifiers, on_delete: :restrict
12+
}
13+
# rubocop:enable Rails/NotNullColumn
14+
end
15+
end
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
862fdbc0a63df92424319894f331d68ee7d36cdd6f0e83996f83bdb4dfc3e371

db/structure.sql

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,11 @@ CREATE TABLE reference_values (
662662
id bigint NOT NULL,
663663
created_at timestamp with time zone NOT NULL,
664664
updated_at timestamp with time zone NOT NULL,
665-
node_function_id bigint NOT NULL
665+
node_function_id bigint NOT NULL,
666+
depth integer DEFAULT 0 NOT NULL,
667+
node integer DEFAULT 0 NOT NULL,
668+
scope integer[] DEFAULT '{}'::integer[] NOT NULL,
669+
data_type_identifier_id bigint NOT NULL
666670
);
667671

668672
CREATE SEQUENCE reference_values_id_seq
@@ -1197,6 +1201,8 @@ CREATE INDEX index_parameter_definitions_on_runtime_parameter_definition_id ON p
11971201

11981202
CREATE INDEX index_reference_paths_on_reference_value_id ON reference_paths USING btree (reference_value_id);
11991203

1204+
CREATE INDEX index_reference_values_on_data_type_identifier_id ON reference_values USING btree (data_type_identifier_id);
1205+
12001206
CREATE INDEX index_reference_values_on_node_function_id ON reference_values USING btree (node_function_id);
12011207

12021208
CREATE INDEX index_runtime_function_definitions_on_return_type_id ON runtime_function_definitions USING btree (return_type_id);
@@ -1354,6 +1360,9 @@ ALTER TABLE ONLY flow_type_settings
13541360
ALTER TABLE ONLY flows
13551361
ADD CONSTRAINT fk_rails_ab927e0ecb FOREIGN KEY (project_id) REFERENCES namespace_projects(id) ON DELETE CASCADE;
13561362

1363+
ALTER TABLE ONLY reference_values
1364+
ADD CONSTRAINT fk_rails_bb34a5d62c FOREIGN KEY (data_type_identifier_id) REFERENCES data_type_identifiers(id) ON DELETE RESTRICT;
1365+
13571366
ALTER TABLE ONLY flows
13581367
ADD CONSTRAINT fk_rails_bb587eff6a FOREIGN KEY (input_type_id) REFERENCES data_types(id) ON DELETE RESTRICT;
13591368

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
title: DataTypeIdentifierInput
3+
---
4+
5+
Input type for data type identifier
6+
7+
## Fields
8+
9+
| Name | Type | Description |
10+
|------|------|-------------|
11+
| `dataTypeId` | [`DataTypeID`](../scalar/datatypeid.md) | Data type ID |
12+
| `genericKey` | [`String`](../scalar/string.md) | Generic key value |
13+
| `genericType` | [`GenericTypeInput`](../input_object/generictypeinput.md) | Generic type information |
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
title: GenericMapperInput
3+
---
4+
5+
Input type for generic mappers
6+
7+
## Fields
8+
9+
| Name | Type | Description |
10+
|------|------|-------------|
11+
| `sources` | [`[DataTypeIdentifierInput!]!`](../input_object/datatypeidentifierinput.md) | The source data type identifier for the mapper |
12+
| `target` | [`String!`](../scalar/string.md) | The target data type identifier for the mapper |
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
title: GenericTypeInput
3+
---
4+
5+
Input type for generic type operations.
6+
7+
## Fields
8+
9+
| Name | Type | Description |
10+
|------|------|-------------|
11+
| `dataTypeId` | [`DataTypeID!`](../scalar/datatypeid.md) | The data type associated with this generic type. |
12+
| `genericMappers` | [`[GenericMapperInput!]!`](../input_object/genericmapperinput.md) | The mappers associated with this generic type. |

0 commit comments

Comments
 (0)