gitcoinco/code_fund_ads

View on GitHub
app/jobs/create_organization_report_job.rb

Summary

Maintainability
A
15 mins
Test Coverage
class CreateOrganizationReportJob < ApplicationJob
  queue_as :default

  def perform(id:)
    organization = Organization.find_by(id: id)
    return unless organization
    campaigns = organization.campaigns.active
    return unless campaigns.exists?
    organization_report = build_report(organization, campaigns)
    if organization_report.save
      GenerateOrganizationReportJob.perform_later(
        id: organization_report.id,
        report_url: Rails.application.routes.url_helpers.organization_report_url(organization_id: organization_report.organization_id, id: organization_report.id, host: ENV["DEFAULT_HOST"]),
        recipients: organization_report.recipients
      )
    end
  end

  private

  def build_report(organization, campaigns)
    recipients = organization.users.map(&:email)
    recipients << ENUMS::EMAIL_ADDRESSES::ERIC

    organization.organization_reports.build(
      title: "#{organization.name} Summary Report",
      start_date: campaigns.minimum(:start_date),
      end_date: campaigns.maximum(:end_date),
      campaign_ids: campaigns.map(&:id),
      recipients: recipients
    )
  end
end