diff --git a/app/models/team.rb b/app/models/team.rb index e69afc239..b058de822 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -313,16 +313,6 @@ class Team < ApplicationRecord def generate_template_project return if without_templates - user = created_by - return unless user - Project.transaction do - tmpl_project = projects.create!( - name: Constants::TEMPLATES_PROJECT_NAME, - visibility: :visible, - template: true - ) - tmpl_project.user_projects.create!(user: user, role: 0) - TemplatesService.new.update_project(tmpl_project) - end + TemplatesService.new.update_team(self) end end diff --git a/app/services/templates_service.rb b/app/services/templates_service.rb index b3cd76c18..3ec39599c 100644 --- a/app/services/templates_service.rb +++ b/app/services/templates_service.rb @@ -13,33 +13,42 @@ class TemplatesService end end - def update_project(project) - return unless project.template - owner = project.user_projects - .where(role: 'owner') - .order(:created_at) - .first - .user + def update_team(team) + tmpl_project = team.projects.where(template: true).take + unless tmpl_project + Project.transaction do + tmpl_project = team.projects.create!( + name: Constants::TEMPLATES_PROJECT_NAME, + visibility: :visible, + template: true + ) + tmpl_project.user_projects.create!(user: team.created_by, role: 'owner') + end + end + owner = tmpl_project.user_projects + .where(role: 'owner') + .order(:created_at) + .first&.user return unless owner.present? updated = false exp_tmplt_dir_prefix = "#{@base_dir}/experiment_" - existing = project.experiments.where.not(uuid: nil).pluck(:uuid) + existing = tmpl_project.experiments.where.not(uuid: nil).pluck(:uuid) @experiment_templates.except(*existing).each_value do |id| importer_service = TeamImporter.new importer_service.import_experiment_template_from_dir( - exp_tmplt_dir_prefix + id.to_s, project.id, owner.id + exp_tmplt_dir_prefix + id.to_s, tmpl_project.id, owner.id ) updated = true end updated end - def update_all_projects + def update_all_templates processed_counter = 0 updated_counter = 0 - Project.where(template: true).find_each do |project| + Team.find_each do |team| processed_counter += 1 - updated_counter += 1 if update_project(project) + updated_counter += 1 if update_team(team) end [updated_counter, processed_counter] end diff --git a/config/initializers/scheduler.rb b/config/initializers/scheduler.rb index 9ed3f35aa..2ac9dce33 100644 --- a/config/initializers/scheduler.rb +++ b/config/initializers/scheduler.rb @@ -8,7 +8,7 @@ if ENV['ENABLE_TEMPLATES_SYNC'] && ARGV[0] == 'jobs:work' # Templates sync periodic task scheduler.every '1h' do Rails.logger.info('Templates, syncing all template projects') - updated, total = TemplatesService.new.update_all_projects + updated, total = TemplatesService.new.update_all_templates Rails.logger.info( "Templates, total number of updated projects: #{updated} out of #{total}}" ) diff --git a/lib/tasks/data.rake b/lib/tasks/data.rake index c01f9dcfb..74078921d 100644 --- a/lib/tasks/data.rake +++ b/lib/tasks/data.rake @@ -133,7 +133,7 @@ namespace :data do desc 'Update all templates projects' task update_all_templates: :environment do Rails.logger.info('Templates, syncing all templates projects') - updated, total = TemplatesService.new.update_all_projects + updated, total = TemplatesService.new.update_all_templates Rails.logger.info( "Templates, total number of updated projects: #{updated} out of #{total}}" ) diff --git a/spec/services/templates_service_spec.rb b/spec/services/templates_service_spec.rb index 717460afa..57bacf77e 100644 --- a/spec/services/templates_service_spec.rb +++ b/spec/services/templates_service_spec.rb @@ -25,12 +25,13 @@ describe TemplatesService do FileUtils.remove_dir(tmplts_dir) if Dir.exist?(tmplts_dir) FileUtils.mkdir(tmplts_dir) FileUtils.mv(exp_dir, "#{tmplts_dir}/experiment_#{demo_exp.id}") - templates_project = create :project, name: 'Templates', template: true + templates_project = + create :project, name: 'Templates', template: true, team: main_team create( :user_project, :owner, project: templates_project, user: admin_user ) ts = TemplatesService.new(tmplts_dir) - ts.update_project(templates_project) + ts.update_team(main_team) Delayed::Job.all.each { |job| dj_worker.run(job) } tmpl_exp = templates_project.experiments.first