import_job_base.rb 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. module Integration::ImportJobBase
  2. extend ActiveSupport::Concern
  3. def job_try_index
  4. job_index(
  5. dry_run: true,
  6. take_finished: params[:finished] == 'true'
  7. )
  8. end
  9. def job_try_create
  10. ImportJob.dry_run(name: backend, payload: payload_dry_run)
  11. render json: {
  12. result: 'ok',
  13. }
  14. end
  15. def job_start_index
  16. job_index(dry_run: false)
  17. end
  18. def job_start_create
  19. if !ImportJob.exists?(name: backend, finished_at: nil)
  20. job = ImportJob.create(name: backend)
  21. job.delay.start
  22. end
  23. render json: {
  24. result: 'ok',
  25. }
  26. end
  27. def payload_dry_run
  28. clean_payload(params.permit!.to_h)
  29. end
  30. private
  31. def clean_payload(payload)
  32. payload.except(:wizardData, :action, :controller)
  33. end
  34. def answer_with
  35. result = yield
  36. render json: result.merge(result: 'ok')
  37. rescue => e
  38. logger.error(e)
  39. render json: {
  40. result: 'failed',
  41. message: e.message,
  42. }
  43. end
  44. def backend
  45. "Import::#{controller_name.classify}"
  46. end
  47. def job_index(dry_run:, take_finished: true)
  48. job = ImportJob.find_by(
  49. name: backend,
  50. dry_run: dry_run,
  51. finished_at: nil
  52. )
  53. if !job && take_finished
  54. job = ImportJob.where(
  55. name: backend,
  56. dry_run: dry_run
  57. ).order(created_at: :desc).limit(1).first
  58. end
  59. if job
  60. model_show_render_item(job)
  61. else
  62. render json: {}
  63. end
  64. end
  65. end