50 lines
1.2 KiB
Ruby
50 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Admin::WatchedWordsController < Admin::AdminController
|
|
|
|
def index
|
|
render_json_dump WatchedWordListSerializer.new(WatchedWord.by_action, scope: guardian, root: false)
|
|
end
|
|
|
|
def create
|
|
watched_word = WatchedWord.create_or_update_word(watched_words_params)
|
|
if watched_word.valid?
|
|
render json: watched_word, root: false
|
|
else
|
|
render_json_error(watched_word)
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
watched_word = WatchedWord.find(params[:id])
|
|
watched_word.destroy
|
|
render json: success_json
|
|
end
|
|
|
|
def upload
|
|
file = params[:file] || params[:files].first
|
|
action_key = params[:action_key].to_sym
|
|
|
|
Scheduler::Defer.later("Upload watched words") do
|
|
begin
|
|
File.open(file.tempfile, encoding: "bom|utf-8").each_line do |line|
|
|
WatchedWord.create_or_update_word(word: line, action_key: action_key) unless line.empty?
|
|
end
|
|
data = { url: '/ok' }
|
|
rescue => e
|
|
data = failed_json.merge(errors: [e.message])
|
|
end
|
|
MessageBus.publish("/uploads/csv", data.as_json, client_ids: [params[:client_id]])
|
|
end
|
|
|
|
render json: success_json
|
|
end
|
|
|
|
private
|
|
|
|
def watched_words_params
|
|
params.permit(:id, :word, :action_key)
|
|
end
|
|
|
|
end
|