77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| class ItemBanksController < ApplicationController
 | |
|   include PaginateHelper
 | |
|   before_action :require_login
 | |
|   before_action :certi_identity_auth, only: [:create, :edit, :update, :destroy, :set_public]
 | |
|   before_action :find_item, except: [:index, :create]
 | |
|   before_action :edit_auth, only: [:update, :destroy, :set_public]
 | |
|   before_action :identity_auth, only: [:index]
 | |
| 
 | |
|   def index
 | |
|     items = ItemBankQuery.call(params)
 | |
|     @items_count = items.size
 | |
|     @items = paginate items.includes(:item_analysis, :user, :container)
 | |
|     exam = ExaminationBank.find_by(id: params[:exam_id]) if params[:exam_id].present?
 | |
|     exam_setting = ExaminationIntelligentSetting.find_by(id: params[:exam_setting_id]) if params[:exam_setting_id].present?
 | |
|     @item_basket_ids = if exam
 | |
|                          exam.examination_items.pluck(:item_bank_id)
 | |
|                        elsif exam_setting
 | |
|                          exam_setting.item_baskets.pluck(:item_bank_id)
 | |
|                        else
 | |
|                          current_user.item_baskets.pluck(:item_bank_id)
 | |
|                        end
 | |
|   end
 | |
| 
 | |
|   def create
 | |
|     item = ItemBank.new(user: current_user)
 | |
|     ItemBanks::SaveItemService.call(item, form_params)
 | |
|     render_ok
 | |
|   rescue ApplicationService::Error => ex
 | |
|     render_error(ex.message)
 | |
|   end
 | |
| 
 | |
|   def edit
 | |
| 
 | |
|   end
 | |
| 
 | |
|   def update
 | |
|     ItemBanks::SaveItemService.call(@item, form_params)
 | |
|     render_ok
 | |
|   rescue ApplicationService::Error => ex
 | |
|     render_error(ex.message)
 | |
|   end
 | |
| 
 | |
|   def destroy
 | |
|     ActiveRecord::Base.transaction do
 | |
|       ApplyAction.where(container_type: "ItemBank", container_id: @item.id).destroy_all
 | |
|       if @item.item_type == "PROGRAM"
 | |
|         @item.container&.destroy!
 | |
|       else
 | |
|         @item.destroy!
 | |
|       end
 | |
|       render_ok
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def set_public
 | |
|     tip_exception(-1, "该试题已公开") if @item.public?
 | |
|     tip_exception(-1, "请勿重复提交申请") if ApplyAction.where(container_id: @item.id, container_type: 'ItemBank', status: 0).exists?
 | |
|     ApplyAction.create!(container_id: @item.id, container_type: 'ItemBank', user_id: current_user.id)
 | |
|     # @item.update_attributes!(public: 1)
 | |
|     render_ok
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def find_item
 | |
|     @item = ItemBank.find_by!(id: params[:id])
 | |
|   end
 | |
| 
 | |
|   def edit_auth
 | |
|     current_user.admin_or_business? || @item.user == current_user
 | |
|   end
 | |
| 
 | |
|   def form_params
 | |
|     params.permit(:discipline_id, :sub_discipline_id, :item_type, :difficulty, :name, :analysis, tag_discipline_id: [], choices: %i[choice_text is_answer])
 | |
|   end
 | |
| 
 | |
| end |