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