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