Skip to content

Commit dcaf97b

Browse files
committed
Remove circular calls to myetm from engine on user CRUD, pass necessary params from myetm
1 parent 2615e53 commit dcaf97b

File tree

6 files changed

+226
-193
lines changed

6 files changed

+226
-193
lines changed

app/models/scenario.rb

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -363,52 +363,37 @@ def delete_all_users
363363
scenario_users.delete_all
364364
end
365365

366-
def copy_preset_roles
366+
def copy_preset_roles(preset_scenario_users = nil)
367367
return unless parent
368-
return if copy_roles_from_saved_scenario
369368

370-
parent.scenario_users.each do |preset_user|
371-
if (existing_user = scenario_users.find_by(user: preset_user.user))
372-
existing_user.role_id = preset_user.role_id
373-
existing_user.save(validate: false)
374-
else
375-
scenario_users.create(user: preset_user.user, role_id: preset_user.role_id)
376-
end
369+
if preset_scenario_users.present?
370+
copy_roles_from_user_data(preset_scenario_users)
371+
else
372+
copy_roles_from_parent
377373
end
378374
end
379375

380376
private
381377

382-
def copy_roles_from_saved_scenario
383-
saved_scenario_id = fetch_saved_scenario_id_for(parent.id)
384-
return false unless saved_scenario_id
385-
386-
users_data = fetch_saved_scenario_users(saved_scenario_id)
387-
return false unless users_data
388-
378+
def copy_roles_from_user_data(users_data)
389379
users_data.each do |user_data|
390380
scenario_users.create(
391-
user_id: user_data['user_id'],
392-
user_email: user_data['user_email'],
393-
role_id: user_data['role_id']
381+
user_id: user_data['user_id'] || user_data[:user_id],
382+
user_email: user_data['user_email'] || user_data[:user_email],
383+
role_id: user_data['role_id'] || user_data[:role_id]
394384
)
395385
end
396-
397-
true
398-
rescue StandardError
399-
false
400386
end
401387

402-
def fetch_saved_scenario_id_for(scenario_id)
403-
scenario = Scenario.find_by(id: scenario_id)
404-
scenario&.metadata&.dig('saved_scenario_id')
405-
end
406-
407-
def fetch_saved_scenario_users(saved_scenario_id)
408-
response = ETEngine::MyEtm.client.get("/api/v1/saved_scenarios/#{saved_scenario_id}/users")
409-
response.success? ? response.body : nil
410-
rescue Faraday::Error
411-
nil
388+
def copy_roles_from_parent
389+
parent.scenario_users.each do |preset_user|
390+
if (existing_user = scenario_users.find_by(user: preset_user.user))
391+
existing_user.role_id = preset_user.role_id
392+
existing_user.save(validate: false)
393+
else
394+
scenario_users.create(user: preset_user.user, role_id: preset_user.role_id)
395+
end
396+
end
412397
end
413398

414399
# Validation method for when a user sets their metadata.

app/models/scenario_updater.rb

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def process(scenario_data, provided_values)
5959
balanced_values = yield calculate_balanced_values(
6060
user_values, provided_values, coupling_state, reset, autobalance, force_balance
6161
)
62-
_balanced = yield validate_balance(user_values, balanced_values, provided_values)
62+
_balanced = yield validate_balance(user_values, balanced_values, provided_values)
6363

6464
Success([coupling_state, user_values, balanced_values])
6565
end
@@ -75,7 +75,8 @@ def apply(scenario_data, (coupling_state, user_values, balanced_values))
7575
# Post-save
7676
def post_save(scenario_data, persisted)
7777
set_preset_roles = truthy?(scenario_data[:set_preset_roles])
78-
_post_saved = yield post_save_operations(set_preset_roles)
78+
preset_scenario_users = scenario_data[:preset_scenario_users]
79+
_post_saved = yield post_save_operations(set_preset_roles, preset_scenario_users)
7980
Success(persisted)
8081
end
8182

@@ -113,25 +114,26 @@ def calculate_user_values(provided_values, coupling_state, reset)
113114
)
114115
end
115116

116-
def calculate_balanced_values(user_values, provided_values, coupling_state, reset, autobalance, force_balance)
117+
def calculate_balanced_values(user_values, provided_values, coupling_state, reset, autobalance,
118+
force_balance)
117119
service(:CalculateBalancedValues).call(
118120
scenario,
119-
user_values: user_values,
120-
provided_values: provided_values,
121+
user_values:,
122+
provided_values:,
121123
uncoupled_inputs: coupling_state[:uncoupled_inputs],
122-
reset: reset,
123-
autobalance: autobalance,
124-
force_balance: force_balance
124+
reset:,
125+
autobalance:,
126+
force_balance:
125127
)
126128
end
127129

128130
def validate_balance(user_values, balanced_values, provided_values)
129131
service(:ValidateBalance).call(
130132
scenario,
131-
user_values: user_values,
132-
balanced_values: balanced_values,
133-
provided_values: provided_values,
134-
skip_validation: skip_validation
133+
user_values:,
134+
balanced_values:,
135+
provided_values:,
136+
skip_validation:
135137
)
136138
end
137139

@@ -147,8 +149,9 @@ def persist_scenario(attributes)
147149
service(:PersistScenario).call(scenario, attributes, skip_validation)
148150
end
149151

150-
def post_save_operations(set_preset_roles)
151-
service(:PostSaveOperations).call(scenario, set_preset_roles, current_user)
152+
def post_save_operations(set_preset_roles, preset_scenario_users)
153+
service(:PostSaveOperations).call(scenario, set_preset_roles, preset_scenario_users,
154+
current_user)
152155
end
153156

154157
# Helper to instantiate services

app/models/scenario_updater/services/post_save_operations.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ class PostSaveOperations
88

99
TRUTHY_VALUES = Set.new([true, 'true', '1']).freeze
1010

11-
def call(scenario, set_preset_roles, current_user)
12-
copy_preset_roles_if_requested(scenario, set_preset_roles)
11+
def call(scenario, set_preset_roles, preset_scenario_users, current_user)
12+
copy_preset_roles_if_requested(scenario, set_preset_roles, preset_scenario_users)
1313
update_version_tag(scenario, current_user)
1414

1515
Success(scenario)
1616
end
1717

1818
private
1919

20-
def copy_preset_roles_if_requested(scenario, set_preset_roles)
21-
should_copy = TRUTHY_VALUES.include?(set_preset_roles)
22-
scenario.copy_preset_roles if should_copy
20+
def copy_preset_roles_if_requested(scenario, set_preset_roles, preset_scenario_users)
21+
should_copy = TRUTHY_VALUES.include?(set_preset_roles) || preset_scenario_users.present?
22+
scenario.copy_preset_roles(preset_scenario_users) if should_copy
2323
end
2424

2525
def update_version_tag(scenario, current_user)

lib/etengine/my_etm.rb

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)