You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.6 KiB
97 lines
2.6 KiB
5 years ago
|
class Admins::MirrorRepositoriesController < Admins::BaseController
|
||
|
before_action :check_shixun_mirrors!, only: [:index]
|
||
|
|
||
|
def index
|
||
|
mirrors = MirrorRepository.all
|
||
|
mirrors = mirrors.reorder(status: :desc, main_type: :desc, type_name: :asc)
|
||
|
|
||
|
@mirrors = paginate mirrors.includes(:mirror_scripts)
|
||
|
@error_mirror_names = MirrorRepository.where(status: 5).pluck(:name)
|
||
|
end
|
||
|
|
||
|
def new
|
||
|
@mirror = MirrorRepository.new
|
||
|
end
|
||
|
|
||
|
def create
|
||
|
@mirror = MirrorRepository.new
|
||
|
Admins::SaveMirrorRepositoryService.call(@mirror, current_user, form_params)
|
||
|
|
||
|
flash[:success] = '保存成功'
|
||
|
redirect_to edit_admins_mirror_repository_path(@mirror)
|
||
|
rescue ActiveRecord::RecordInvalid
|
||
|
flash.now[:danger] = '保存失败'
|
||
|
render 'new'
|
||
|
rescue Admins::SaveMirrorRepositoryService::Error => ex
|
||
|
flash.now[:danger] = ex.message
|
||
|
render 'new'
|
||
|
end
|
||
|
|
||
|
def edit
|
||
|
@mirror = current_mirror
|
||
|
end
|
||
|
|
||
|
def update
|
||
|
@mirror = current_mirror
|
||
|
|
||
|
Admins::SaveMirrorRepositoryService.call(current_mirror, current_user, form_params)
|
||
|
|
||
|
flash[:success] = '保存成功'
|
||
|
redirect_to edit_admins_mirror_repository_path(current_mirror)
|
||
|
rescue ActiveRecord::RecordInvalid
|
||
|
flash.now[:danger] = '保存失败'
|
||
|
render 'edit'
|
||
|
rescue Admins::SaveMirrorRepositoryService::Error => ex
|
||
|
flash.now[:danger] = ex.message
|
||
|
render 'edit'
|
||
|
end
|
||
|
|
||
|
def destroy
|
||
|
return render_js_error('该状态下不允许删除') unless current_mirror.deletable?
|
||
|
|
||
|
current_mirror.destroy!
|
||
|
|
||
|
render_delete_success
|
||
|
end
|
||
|
|
||
|
def for_select
|
||
|
mirrors = MirrorRepository.all
|
||
|
|
||
|
keyword = params[:keyword].to_s.strip
|
||
|
mirrors = mirrors.where('name LIKE ?', "%#{keyword}%") if keyword.present?
|
||
|
|
||
|
@mirrors = paginate mirrors
|
||
|
|
||
|
render_ok(count: @mirrors.total_count, mirrors: @mirrors.as_json(only: %i[id name]))
|
||
|
end
|
||
|
|
||
|
def merge
|
||
|
origin_mirror = MirrorRepository.find(params[:mirror_id])
|
||
|
mirror = MirrorRepository.find(params[:new_mirror_id])
|
||
|
|
||
|
ActiveRecord::Base.transaction do
|
||
|
origin_mirror.update!(name: mirror.name, mirrorID: mirror.mirrorID)
|
||
|
mirror.destroy!
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def current_mirror
|
||
|
@_current_mirror ||= MirrorRepository.find(params[:id])
|
||
|
end
|
||
|
|
||
|
def form_params
|
||
|
columns = %i[type_name main_type time_limit resource_limit cpu_limit memory_limit description status]
|
||
|
params.require(:mirror_repository).permit(*columns)
|
||
|
end
|
||
|
|
||
|
def check_shixun_mirrors!
|
||
|
return unless request.format.html?
|
||
|
|
||
|
Admins::CheckShixunMirrorsService.call
|
||
|
rescue Admins::CheckShixunMirrorsService::Error => e
|
||
|
internal_server_error(e.message)
|
||
|
end
|
||
|
end
|