Move refresh reference from controller to model

This commit is contained in:
Urban Rotnik 2020-05-25 12:47:58 +02:00
parent df8fe20d03
commit d9690115f8
3 changed files with 22 additions and 15 deletions

View file

@ -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

View file

@ -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

View file

@ -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