From 844303ae7cccf80964d89c3ebbf1c19850173ab6 Mon Sep 17 00:00:00 2001 From: Miha Mencin Date: Fri, 1 Mar 2019 17:47:04 +0100 Subject: [PATCH 1/4] SCI-3119 schedule the creaton of template --- app/controllers/users/sessions_controller.rb | 1 + app/models/team.rb | 2 ++ app/services/templates_service.rb | 10 ++++++++++ 3 files changed, 13 insertions(+) diff --git a/app/controllers/users/sessions_controller.rb b/app/controllers/users/sessions_controller.rb index 07437e74d..4e59b097e 100644 --- a/app/controllers/users/sessions_controller.rb +++ b/app/controllers/users/sessions_controller.rb @@ -47,6 +47,7 @@ class Users::SessionsController < Devise::SessionsController def after_sign_in flash[:system_notification_modal] = true + TemplatesService.new.schedule_creation_for_user(current_user) end protected diff --git a/app/models/team.rb b/app/models/team.rb index dd1fa2464..12b7cefd8 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -41,6 +41,8 @@ class Team < ApplicationRecord attr_accessor :without_intro_demo after_create :generate_intro_demo + scope :without_templates, -> { includes(:projects).where("projects.template": nil) } + def default_view_state { 'projects' => { 'cards' => { 'sort' => 'new' }, diff --git a/app/services/templates_service.rb b/app/services/templates_service.rb index a6a025ffc..3235cd4ca 100644 --- a/app/services/templates_service.rb +++ b/app/services/templates_service.rb @@ -55,4 +55,14 @@ class TemplatesService end [updated_counter, processed_counter] end + + def schedule_creation_for_user(user) + user.teams.each do |team| + unless team.projects.where(template: true).any? + TemplatesService.new.delay( + queue: :templates + ).update_team(team) + end + end + end end From 2ba040980f57975d67618fd9a9f306ed5a6a15cc Mon Sep 17 00:00:00 2001 From: Miha Mencin Date: Fri, 1 Mar 2019 17:48:38 +0100 Subject: [PATCH 2/4] reverting the team changes, the scope is not needed --- app/models/team.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/models/team.rb b/app/models/team.rb index 12b7cefd8..dd1fa2464 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -41,8 +41,6 @@ class Team < ApplicationRecord attr_accessor :without_intro_demo after_create :generate_intro_demo - scope :without_templates, -> { includes(:projects).where("projects.template": nil) } - def default_view_state { 'projects' => { 'cards' => { 'sort' => 'new' }, From fa7bba9de7b1884806775adf02caed187b30c16d Mon Sep 17 00:00:00 2001 From: Miha Mencin Date: Mon, 4 Mar 2019 18:11:50 +0100 Subject: [PATCH 3/4] scheduling creation of demo project at the sign in time remove wrong schema, fix comment, add migration --- app/controllers/users/sessions_controller.rb | 10 ++++ app/utilities/first_time_data_generator.rb | 59 ++++++++++--------- ...20190304153544_add_demo_flag_to_project.rb | 5 ++ db/schema.rb | 3 +- 4 files changed, 49 insertions(+), 28 deletions(-) create mode 100644 db/migrate/20190304153544_add_demo_flag_to_project.rb diff --git a/app/controllers/users/sessions_controller.rb b/app/controllers/users/sessions_controller.rb index 4e59b097e..739cbd63c 100644 --- a/app/controllers/users/sessions_controller.rb +++ b/app/controllers/users/sessions_controller.rb @@ -47,7 +47,17 @@ class Users::SessionsController < Devise::SessionsController def after_sign_in flash[:system_notification_modal] = true + + # Schedule templates creation for user TemplatesService.new.schedule_creation_for_user(current_user) + + # Schedule demo project creation for user + current_user.created_teams.each do |team| + FirstTimeDataGenerator.delay( + queue: :new_demo_project, + priority: 10 + ).seed_demo_data_with_id(current_user.id, team.id) + end end protected diff --git a/app/utilities/first_time_data_generator.rb b/app/utilities/first_time_data_generator.rb index 739a24771..17c254824 100644 --- a/app/utilities/first_time_data_generator.rb +++ b/app/utilities/first_time_data_generator.rb @@ -11,6 +11,38 @@ module FirstTimeDataGenerator # Do nothing return unless team + # Skip this team if user already has a demo project + return if team.projects.where(demo: true).any? + + name = '[NEW] Demo project by SciNote' + exp_name = 'Polymerase chain reaction' + # If there is an existing demo project, archive and rename it + if team.projects.where(name: name).present? + # TODO: check if we still need this code + # old = team.projects.where(name: 'Demo project - qPCR')[0] + # old.archive! user + i = 1 + while team.projects.where( + name: name = "#{name} (#{i})" + ).present? + i += 1 + end + end + + project = Project.create( + visibility: 0, + name: name, + due_date: nil, + team: team, + created_by: user, + created_at: generate_random_time(1.week.ago), + last_modified_by: user, + archived: false, + template: false, + demo: true + ) + + # check if samples repo already exist, then create custom repository samples repository = Repository.where(team: team).where(name: REPO_SAMPLES_NAME) repository = @@ -192,33 +224,6 @@ module FirstTimeDataGenerator ) end - name = 'Demo project' - name = '[NEW] Demo project by SciNote' - exp_name = 'Polymerase chain reaction' - # If there is an existing demo project, archive and rename it - if team.projects.where(name: name).present? - # TODO: check if we still need this code - # old = team.projects.where(name: 'Demo project - qPCR')[0] - # old.archive! user - i = 1 - while team.projects.where( - name: name = "#{name} (#{i})" - ).present? - i += 1 - end - end - - project = Project.create( - visibility: 0, - name: name, - due_date: nil, - team: team, - created_by: user, - created_at: generate_random_time(1.week.ago), - last_modified_by: user, - archived: false - ) - experiment_description = 'Polymerase chain reaction (PCR) monitors the amplification of DNA ' \ 'in real time (qPCR cyclers constantly scan qPCR plates). It is, in ' \ diff --git a/db/migrate/20190304153544_add_demo_flag_to_project.rb b/db/migrate/20190304153544_add_demo_flag_to_project.rb new file mode 100644 index 000000000..7aa016bea --- /dev/null +++ b/db/migrate/20190304153544_add_demo_flag_to_project.rb @@ -0,0 +1,5 @@ +class AddDemoFlagToProject < ActiveRecord::Migration[5.1] + def change + add_column :projects, :demo, :boolean, null: false, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index bd5623d77..76f071cdc 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20190227125352) do +ActiveRecord::Schema.define(version: 20190304153544) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -298,6 +298,7 @@ ActiveRecord::Schema.define(version: 20190227125352) do t.datetime "restored_on" t.string "experiments_order" t.boolean "template" + t.boolean "demo", default: false, null: false t.index "trim_html_tags((name)::text) gin_trgm_ops", name: "index_projects_on_name", using: :gin t.index ["archived_by_id"], name: "index_projects_on_archived_by_id" t.index ["created_by_id"], name: "index_projects_on_created_by_id" From 6deaff6382d3f1c6ec5cf83679f681a050f48a40 Mon Sep 17 00:00:00 2001 From: Miha Mencin Date: Mon, 4 Mar 2019 18:36:32 +0100 Subject: [PATCH 4/4] fixing hound errors --- app/services/templates_service.rb | 10 +++++----- app/utilities/first_time_data_generator.rb | 1 - db/migrate/20190304153544_add_demo_flag_to_project.rb | 1 + 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/services/templates_service.rb b/app/services/templates_service.rb index 3235cd4ca..0ff844240 100644 --- a/app/services/templates_service.rb +++ b/app/services/templates_service.rb @@ -58,11 +58,11 @@ class TemplatesService def schedule_creation_for_user(user) user.teams.each do |team| - unless team.projects.where(template: true).any? - TemplatesService.new.delay( - queue: :templates - ).update_team(team) - end + next if team.projects.where(template: true).any? + + TemplatesService.new.delay( + queue: :templates + ).update_team(team) end end end diff --git a/app/utilities/first_time_data_generator.rb b/app/utilities/first_time_data_generator.rb index 17c254824..a3c38aaa3 100644 --- a/app/utilities/first_time_data_generator.rb +++ b/app/utilities/first_time_data_generator.rb @@ -42,7 +42,6 @@ module FirstTimeDataGenerator demo: true ) - # check if samples repo already exist, then create custom repository samples repository = Repository.where(team: team).where(name: REPO_SAMPLES_NAME) repository = diff --git a/db/migrate/20190304153544_add_demo_flag_to_project.rb b/db/migrate/20190304153544_add_demo_flag_to_project.rb index 7aa016bea..f67529018 100644 --- a/db/migrate/20190304153544_add_demo_flag_to_project.rb +++ b/db/migrate/20190304153544_add_demo_flag_to_project.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: true class AddDemoFlagToProject < ActiveRecord::Migration[5.1] def change add_column :projects, :demo, :boolean, null: false, default: false