trabajo-afectivo/app/controllers/concerns/integration/import_job_base.rb

80 lines
1.5 KiB
Ruby
Raw Permalink Normal View History

2022-01-01 13:38:12 +00:00
# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
module Integration::ImportJobBase
extend ActiveSupport::Concern
def job_try_index
job_index(
dry_run: true,
take_finished: params[:finished] == 'true'
)
end
def job_try_create
ImportJob.dry_run(name: backend, payload: payload_dry_run)
render json: {
result: 'ok',
}
end
def job_start_index
job_index(dry_run: false)
end
def job_start_create
if !ImportJob.exists?(name: backend, finished_at: nil)
job = ImportJob.create(name: backend)
AsyncImportJob.perform_later(job)
end
render json: {
result: 'ok',
}
end
def payload_dry_run
clean_payload(params.permit!.to_h)
end
private
def clean_payload(payload)
payload.except(:wizardData, :action, :controller)
end
def answer_with
result = yield
render json: result.merge(result: 'ok')
rescue => e
logger.error(e)
render json: {
result: 'failed',
message: e.message,
}
end
def backend
"Import::#{controller_name.classify}"
end
def job_index(dry_run:, take_finished: true)
job = ImportJob.find_by(
name: backend,
dry_run: dry_run,
finished_at: nil
)
if !job && take_finished
job = ImportJob.where(
name: backend,
dry_run: dry_run
).order(created_at: :desc).limit(1).first
end
if job
model_show_render_item(job)
else
render json: {}
end
end
end