From d9690115f8bbcce02c7afe37d2c49b969c609c36 Mon Sep 17 00:00:00 2001 From: Urban Rotnik Date: Mon, 25 May 2020 12:47:58 +0200 Subject: [PATCH] Move refresh reference from controller to model --- ..._module_repository_snapshots_controller.rb | 11 ---------- app/models/my_module.rb | 6 ++---- app/models/repository_snapshot.rb | 20 +++++++++++++++++++ 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/app/controllers/my_module_repository_snapshots_controller.rb b/app/controllers/my_module_repository_snapshots_controller.rb index 87fa30194..fd81dd7c2 100644 --- a/app/controllers/my_module_repository_snapshots_controller.rb +++ b/app/controllers/my_module_repository_snapshots_controller.rb @@ -6,7 +6,6 @@ class MyModuleRepositorySnapshotsController < ApplicationController before_action :load_repository_snapshot, except: %i(create full_view_sidebar select) before_action :check_view_permissions, except: %i(create destroy select) before_action :check_manage_permissions, only: %i(create destroy select) - before_action :update_report_references, only: :destroy def index_dt @draw = params[:draw].to_i @@ -99,21 +98,11 @@ class MyModuleRepositorySnapshotsController < ApplicationController repository_snapshot.update!(selected: true) end - @my_module.update_report_repository_references(params[:repository_id] || repository_snapshot&.id) - render json: {} end private - def update_report_references - repository_or_snap_id = @repository_snapshot.original_repository&.id || @repository_snapshot.id - default_view_candidate = - @my_module.active_snapshot_or_live(repository_or_snap_id, exclude_snpashot_ids: [@repository_snapshot.id]) - - @my_module.update_report_repository_references(default_view_candidate.id) if default_view_candidate - end - def load_my_module @my_module = MyModule.find_by(id: params[:my_module_id]) render_404 unless @my_module diff --git a/app/models/my_module.rb b/app/models/my_module.rb index 32c8b78d5..867c20dce 100644 --- a/app/models/my_module.rb +++ b/app/models/my_module.rb @@ -239,9 +239,7 @@ class MyModule < ApplicationRecord .order(updated_at: :desc).first end - def update_report_repository_references(rep_or_snap_id) - rep_or_snap = RepositoryBase.find(rep_or_snap_id) - + def update_report_repository_references(rep_or_snap) ids = if rep_or_snap.is_a?(Repository) RepositorySnapshot.where(parent_id: rep_or_snap.id).pluck(:id) else @@ -433,7 +431,7 @@ class MyModule < ApplicationRecord rows = repository.assigned_rows(self).includes(:created_by).order(created_at: order) rows.find_each do |row| row_json = [] - row_json << row.id + row_json << (row.repository.is_a?(RepositorySnapshot) ? row.parent_id : row.id) row_json << row.name row_json << I18n.l(row.created_at, format: :full) row_json << row.created_by.full_name diff --git a/app/models/repository_snapshot.rb b/app/models/repository_snapshot.rb index a0d87432e..4069e4b26 100644 --- a/app/models/repository_snapshot.rb +++ b/app/models/repository_snapshot.rb @@ -2,6 +2,8 @@ class RepositorySnapshot < RepositoryBase enum status: { provisioning: 0, ready: 1, failed: 2 } + after_save :refresh_report_references, if: :saved_change_to_selected + before_destroy :refresh_report_references_for_destroy belongs_to :original_repository, foreign_key: :parent_id, class_name: 'Repository', @@ -39,4 +41,22 @@ class RepositorySnapshot < RepositoryBase errors.add(:selected, I18n.t('activerecord.errors.models.repository_snapshot.attributes.selected.already_taken')) end end + + def refresh_report_references + if selected + ids = Repository.where(id: parent_id).pluck(:id) + + RepositorySnapshot.where(parent_id: parent_id).pluck(:id) + + ReportElement.where(my_module: my_module).where(repository_id: ids).update(repository_id: id) + elsif original_repository && !my_module.selected_snapshot_for_repo(original_repository.id) + my_module.update_report_repository_references(original_repository) + end + end + + def refresh_report_references_for_destroy + repository_or_snap = original_repository || self + default_view_candidate = + my_module.active_snapshot_or_live(repository_or_snap, exclude_snpashot_ids: [id]) + my_module.update_report_repository_references(default_view_candidate) if default_view_candidate + end end