diff --git a/devops-service/app/api2/handlers/project.rb b/devops-service/app/api2/handlers/project.rb index 5b52990..58a9b07 100644 --- a/devops-service/app/api2/handlers/project.rb +++ b/devops-service/app/api2/handlers/project.rb @@ -119,12 +119,9 @@ module Devops def update_project_users id deploy_env, users = parser.project_users project = Devops::Db.connector.project(id) - dbusers = Devops::Db.connector.users(users).map{|u| u.id} - buf = dbusers - users + Validators::Helpers::Users.new(run_list).validate! project.add_authorized_user users, deploy_env - Devops::Db.connector.project_update(project) - info = "Users '#{dbusers.join("', '")}' has been added to '#{id}' project's authorized users" - info << ", invalid users: '#{buf.join("', '")}'" unless buf.empty? + info = "Users '#{users.join("', '")}' has been added to '#{id}' project's authorized users." info end @@ -133,7 +130,6 @@ module Devops deploy_env, users = parser.project_users project = Devops::Db.connector.project(id) project.remove_authorized_user users, deploy_env - Devops::Db.connector.project_update project "Users '#{users.join("', '")}' have been removed from '#{id}' project's authorized users" end diff --git a/devops-service/db/mongo/connectors/project.rb b/devops-service/db/mongo/connectors/project.rb index d601584..4824e10 100644 --- a/devops-service/db/mongo/connectors/project.rb +++ b/devops-service/db/mongo/connectors/project.rb @@ -97,9 +97,13 @@ module Connectors project end + def set_project_deploy_env_field(project_id, env, field, value) + @collection.update({"_id" => project_id, "deploy_envs.identifier" => env}, {"$set" => {"deploy_envs.$.#{field}" => value}}) + end + def set_project_env_run_list(project_id, env, run_list) Helpers::RunList.new(run_list).validate! - @collection.update({"_id" => project_id, "deploy_envs.identifier" => env}, {"$set" => {"deploy_envs.$.run_list" => run_list}}) + set_project_deploy_env_field(project_id, env, "run_list", run_list) end def set_project_run_list(project_id, env, run_list) diff --git a/devops-service/db/mongo/models/project.rb b/devops-service/db/mongo/models/project.rb index 55216b2..c934d56 100644 --- a/devops-service/db/mongo/models/project.rb +++ b/devops-service/db/mongo/models/project.rb @@ -73,11 +73,13 @@ module Devops self.deploy_envs.each do |e| return unless e.users.is_a?(Array) e.users = (e.users + new_users).uniq + Devops::Db.connector.set_project_deploy_env_field(self.id, e.identifier, "users", e.users) end else e = self.deploy_env(env) return unless e.users.is_a?(Array) e.users = (e.users + new_users).uniq + Devops::Db.connector.set_project_deploy_env_field(self.id, e.identifier, "users", e.users) end end @@ -88,11 +90,13 @@ module Devops self.deploy_envs.each do |e| return unless e.users.is_a?(Array) e.users = e.users - users + Devops::Db.connector.set_project_deploy_env_field(self.id, e.identifier, "users", e.users) end else e = self.deploy_env(env) return unless e.users.is_a?(Array) e.users = e.users - users + Devops::Db.connector.set_project_deploy_env_field(self.id, e.identifier, "users", e.users) end end diff --git a/devops-service/db/mongo/mongo_connector.rb b/devops-service/db/mongo/mongo_connector.rb index 79f147e..75bb8a1 100644 --- a/devops-service/db/mongo/mongo_connector.rb +++ b/devops-service/db/mongo/mongo_connector.rb @@ -21,7 +21,7 @@ class MongoConnector [:available_images, :add_available_images, :delete_available_images] => :filters_connector, [:project, :projects_all, :projects, :project_names_with_envs, :projects_by_image, :projects_by_user, :project_insert, :project_update, - :project_delete, :is_project_exists?, :check_project_auth, :set_project_run_list, :set_project_env_run_list, :add_deploy_env_to_project, :remove_deploy_env_from_project, :project_update_field] => :projects_connector, + :project_delete, :is_project_exists?, :check_project_auth, :set_project_run_list, :set_project_deploy_env_field, :set_project_env_run_list, :add_deploy_env_to_project, :remove_deploy_env_from_project, :project_update_field] => :projects_connector, [:project_templates, :project_template_insert, :project_template_update, :project_template_delete] => :projects_templates_connector, [:servers_find, :servers, :stack_servers, :servers_by_names, :server_by_instance_id, diff --git a/devops-service/db/validators/deploy_env/users.rb b/devops-service/db/validators/deploy_env/users.rb index 7aa022b..ceeeebf 100644 --- a/devops-service/db/validators/deploy_env/users.rb +++ b/devops-service/db/validators/deploy_env/users.rb @@ -1,14 +1,5 @@ module Validators class DeployEnv::Users < Base - - def valid? - mongo_users = ::Devops::Db.connector.users_names(@model.users) - @nonexistent_users = @model.users - mongo_users - @nonexistent_users.empty? - end - - def message - Devops::Messages.t("project.deploy_env.validation.users.not_exist", users: @nonexistent_users.join("', '")) - end + delegate_to_helper_validator { Helpers::Users.new(@model.users) } end end diff --git a/devops-service/db/validators/helpers/users.rb b/devops-service/db/validators/helpers/users.rb new file mode 100644 index 0000000..586bfe0 --- /dev/null +++ b/devops-service/db/validators/helpers/users.rb @@ -0,0 +1,14 @@ +module Validators + class Helpers::Users < Base + + def valid? + mongo_users = ::Devops::Db.connector.users_names(@model) + @nonexistent_users = @model - mongo_users + @nonexistent_users.empty? + end + + def message + Devops::Messages.t("project.deploy_env.validation.users.not_exist", users: @nonexistent_users.join("', '")) + end + end +end