60 lines
1.9 KiB
Ruby
60 lines
1.9 KiB
Ruby
class Api::V1::Accounts::Articles::BulkActionsController < Api::V1::Accounts::BaseController
|
|
before_action :portal
|
|
before_action :check_authorization
|
|
before_action :set_articles, only: [:update_status, :update_category, :delete_articles]
|
|
|
|
def translate
|
|
head :not_implemented
|
|
end
|
|
|
|
def update_status
|
|
return render_could_not_create_error(I18n.t('portals.articles.no_articles_found')) if @articles.none?
|
|
return render_could_not_create_error(I18n.t('portals.articles.invalid_status')) unless Article.statuses.key?(params[:status])
|
|
|
|
ActiveRecord::Base.transaction do
|
|
@articles.find_each { |article| article.update!(status: params[:status]) }
|
|
end
|
|
head :ok
|
|
rescue ActiveRecord::RecordInvalid => e
|
|
render_could_not_create_error(e.message)
|
|
end
|
|
|
|
def update_category
|
|
return render_could_not_create_error(I18n.t('portals.articles.no_articles_found')) if @articles.none?
|
|
return render_could_not_create_error(I18n.t('portals.articles.category_not_found')) unless category_valid?
|
|
|
|
ActiveRecord::Base.transaction do
|
|
@articles.find_each { |article| article.update!(category_id: params[:category_id]) }
|
|
end
|
|
head :ok
|
|
rescue ActiveRecord::RecordInvalid => e
|
|
render_could_not_create_error(e.message)
|
|
end
|
|
|
|
def delete_articles
|
|
return render_could_not_create_error(I18n.t('portals.articles.no_articles_found')) if @articles.none?
|
|
|
|
@articles.destroy_all
|
|
head :ok
|
|
end
|
|
|
|
private
|
|
|
|
def portal
|
|
@portal ||= Current.account.portals.find_by!(slug: params[:portal_id])
|
|
end
|
|
|
|
def check_authorization
|
|
authorize(Article, :create?)
|
|
end
|
|
|
|
def set_articles
|
|
@articles = @portal.articles.where(id: params[:ids])
|
|
end
|
|
|
|
def category_valid?
|
|
@portal.categories.exists?(id: params[:category_id])
|
|
end
|
|
end
|
|
Api::V1::Accounts::Articles::BulkActionsController.prepend_mod_with('Api::V1::Accounts::Articles::BulkActionsController')
|