2020-04-21 20:49:36 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class MyModuleRepositorySnapshotsController < ApplicationController
|
|
|
|
before_action :load_my_module
|
2020-05-13 18:58:31 +08:00
|
|
|
before_action :load_repository, only: :create
|
|
|
|
before_action :load_repository_snapshot, except: %i(create full_view_sidebar select)
|
2020-05-12 22:26:44 +08:00
|
|
|
before_action :check_view_permissions, except: %i(create destroy select)
|
|
|
|
before_action :check_manage_permissions, only: %i(create destroy select)
|
2020-04-21 20:49:36 +08:00
|
|
|
|
|
|
|
def index_dt
|
|
|
|
@draw = params[:draw].to_i
|
|
|
|
per_page = params[:length] == '-1' ? Constants::REPOSITORY_DEFAULT_PAGE_SIZE : params[:length].to_i
|
|
|
|
page = (params[:start].to_i / per_page) + 1
|
|
|
|
datatable_service = RepositorySnapshotDatatableService.new(@repository_snapshot, params, current_user, @my_module)
|
|
|
|
|
|
|
|
@all_rows_count = datatable_service.all_count
|
|
|
|
@columns_mappings = datatable_service.mappings
|
2020-05-12 22:26:44 +08:00
|
|
|
if params[:simple_view]
|
|
|
|
repository_rows = datatable_service.repository_rows
|
|
|
|
rows_view = 'repository_rows/simple_view_index.json'
|
|
|
|
else
|
|
|
|
repository_rows = datatable_service.repository_rows
|
|
|
|
.preload(:repository_columns,
|
|
|
|
:created_by,
|
|
|
|
repository_cells: @repository_snapshot.cell_preload_includes)
|
|
|
|
rows_view = 'repository_rows/snapshot_index.json'
|
|
|
|
end
|
|
|
|
@repository_rows = repository_rows.page(page).per(per_page)
|
|
|
|
|
|
|
|
render rows_view
|
2020-04-21 20:49:36 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def create
|
2020-04-28 18:03:23 +08:00
|
|
|
repository_snapshot = @repository.dup.becomes(RepositorySnapshot)
|
|
|
|
repository_snapshot.assign_attributes(type: RepositorySnapshot.name,
|
|
|
|
original_repository: @repository,
|
|
|
|
my_module: @my_module,
|
|
|
|
created_by: current_user)
|
|
|
|
repository_snapshot.provisioning!
|
|
|
|
repository_snapshot.reload
|
|
|
|
|
|
|
|
RepositorySnapshotProvisioningJob.perform_later(repository_snapshot)
|
|
|
|
|
|
|
|
render json: {
|
|
|
|
html: render_to_string(partial: 'my_modules/repositories/full_view_version',
|
|
|
|
locals: { repository_snapshot: repository_snapshot })
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def status
|
|
|
|
render json: {
|
|
|
|
status: @repository_snapshot.status
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def show
|
|
|
|
render json: {
|
|
|
|
html: render_to_string(partial: 'my_modules/repositories/full_view_version',
|
|
|
|
locals: { repository_snapshot: @repository_snapshot })
|
|
|
|
}
|
2020-04-21 20:49:36 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def destroy
|
|
|
|
@repository_snapshot.destroy!
|
2020-04-28 18:03:23 +08:00
|
|
|
render json: {}
|
2020-04-21 20:49:36 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def full_view_table
|
|
|
|
render json: {
|
|
|
|
html: render_to_string(partial: 'my_modules/repositories/full_view_snapshot_table')
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2020-05-13 18:58:31 +08:00
|
|
|
def full_view_sidebar
|
|
|
|
@repository = Repository.find_by(id: params[:repository_id])
|
|
|
|
|
|
|
|
if @repository.present?
|
|
|
|
return render_403 unless can_read_repository?(@repository)
|
|
|
|
end
|
|
|
|
|
|
|
|
@repository_snapshots = @my_module.repository_snapshots.where(parent_id: params[:repository_id])
|
|
|
|
render json: { html: render_to_string(partial: 'my_modules/repositories/full_view_sidebar') }
|
2020-04-21 20:49:36 +08:00
|
|
|
end
|
|
|
|
|
2020-05-12 22:26:44 +08:00
|
|
|
def select
|
|
|
|
if params[:repository_snapshot_id].to_i == -1
|
|
|
|
@my_module.repository_snapshots.where(original_repository: @repository).update(selected: nil)
|
|
|
|
else
|
|
|
|
repository_snapshot = @my_module.repository_snapshots.find_by(id: params[:repository_snapshot_id])
|
|
|
|
return render_404 unless repository_snapshot
|
|
|
|
|
|
|
|
@my_module.repository_snapshots.where(original_repository: @repository).update(selected: nil)
|
|
|
|
repository_snapshot.update!(selected: true)
|
|
|
|
end
|
|
|
|
|
|
|
|
render json: {}
|
|
|
|
end
|
|
|
|
|
2020-04-21 20:49:36 +08:00
|
|
|
private
|
|
|
|
|
|
|
|
def load_my_module
|
|
|
|
@my_module = MyModule.find_by(id: params[:my_module_id])
|
|
|
|
render_404 unless @my_module
|
|
|
|
end
|
|
|
|
|
|
|
|
def load_repository
|
|
|
|
@repository = Repository.find_by(id: params[:repository_id])
|
|
|
|
render_404 unless @repository
|
|
|
|
render_403 unless can_read_repository?(@repository)
|
|
|
|
end
|
|
|
|
|
|
|
|
def load_repository_snapshot
|
|
|
|
@repository_snapshot = @my_module.repository_snapshots.find_by(id: params[:id])
|
|
|
|
render_404 unless @repository_snapshot
|
|
|
|
end
|
|
|
|
|
|
|
|
def check_view_permissions
|
|
|
|
render_403 unless can_read_experiment?(@my_module.experiment)
|
|
|
|
end
|
|
|
|
|
|
|
|
def check_manage_permissions
|
2020-05-12 22:26:44 +08:00
|
|
|
render_403 unless can_manage_module?(@my_module)
|
2020-04-21 20:49:36 +08:00
|
|
|
end
|
|
|
|
end
|