Refactoring: Migrated TicketUserTicketCounterJob from Delayed::Job to Active Job.
This commit is contained in:
parent
953d902a74
commit
21f1841f5b
4 changed files with 82 additions and 51 deletions
39
app/jobs/ticket_user_ticket_counter_job.rb
Normal file
39
app/jobs/ticket_user_ticket_counter_job.rb
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
class TicketUserTicketCounterJob < ApplicationJob
|
||||||
|
def perform(customer_id, updated_by_id)
|
||||||
|
|
||||||
|
# check if update is needed
|
||||||
|
customer = User.lookup(id: customer_id)
|
||||||
|
return if !customer
|
||||||
|
|
||||||
|
# count open and closed tickets of customer
|
||||||
|
ticket_count = {
|
||||||
|
closed: 0,
|
||||||
|
open: 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
if customer_id != 1
|
||||||
|
ticket_count.each_key do |ticket_state_category|
|
||||||
|
ticket_states = Ticket::State.by_category(ticket_state_category)
|
||||||
|
ticket_state_ids = ticket_states.map(&:id)
|
||||||
|
tickets = Ticket.where(
|
||||||
|
customer_id: customer_id,
|
||||||
|
state_id: ticket_state_ids,
|
||||||
|
)
|
||||||
|
ticket_count[ticket_state_category] = tickets.count
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
needs_update = false
|
||||||
|
ticket_count.each_key do |ticket_state_category|
|
||||||
|
preferences_key = ('tickets_' + ticket_state_category.to_s).to_sym
|
||||||
|
next if customer[:preferences][preferences_key] == ticket_count[ticket_state_category]
|
||||||
|
|
||||||
|
needs_update = true
|
||||||
|
customer[:preferences][preferences_key] = ticket_count[ticket_state_category]
|
||||||
|
end
|
||||||
|
return if !needs_update
|
||||||
|
|
||||||
|
customer.updated_by_id = updated_by_id
|
||||||
|
customer.save
|
||||||
|
end
|
||||||
|
end
|
|
@ -17,11 +17,9 @@ class Observer::Ticket::UserTicketCounter < ActiveRecord::Observer
|
||||||
return true if !record.customer_id
|
return true if !record.customer_id
|
||||||
|
|
||||||
# send background job
|
# send background job
|
||||||
Delayed::Job.enqueue(
|
TicketUserTicketCounterJob.perform_later(
|
||||||
Observer::Ticket::UserTicketCounter::BackgroundJob.new(
|
record.customer_id,
|
||||||
record.customer_id,
|
UserInfo.current_user_id || record.updated_by_id,
|
||||||
UserInfo.current_user_id || record.updated_by_id,
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
class Observer::Ticket::UserTicketCounter::BackgroundJob
|
|
||||||
def initialize(customer_id, updated_by_id)
|
|
||||||
@customer_id = customer_id
|
|
||||||
@updated_by_id = updated_by_id
|
|
||||||
end
|
|
||||||
|
|
||||||
def perform
|
|
||||||
|
|
||||||
# open ticket count
|
|
||||||
tickets_open = 0
|
|
||||||
tickets_closed = 0
|
|
||||||
if @customer_id != 1
|
|
||||||
state_open = Ticket::State.by_category(:open)
|
|
||||||
tickets_open = Ticket.where(
|
|
||||||
customer_id: @customer_id,
|
|
||||||
state_id: state_open,
|
|
||||||
).count()
|
|
||||||
|
|
||||||
# closed ticket count
|
|
||||||
state_closed = Ticket::State.by_category(:closed)
|
|
||||||
tickets_closed = Ticket.where(
|
|
||||||
customer_id: @customer_id,
|
|
||||||
state_id: state_closed,
|
|
||||||
).count()
|
|
||||||
end
|
|
||||||
|
|
||||||
# check if update is needed
|
|
||||||
customer = User.lookup(id: @customer_id)
|
|
||||||
return true if !customer
|
|
||||||
|
|
||||||
need_update = false
|
|
||||||
if customer[:preferences][:tickets_open] != tickets_open
|
|
||||||
need_update = true
|
|
||||||
customer[:preferences][:tickets_open] = tickets_open
|
|
||||||
end
|
|
||||||
if customer[:preferences][:tickets_closed] != tickets_closed
|
|
||||||
need_update = true
|
|
||||||
customer[:preferences][:tickets_closed] = tickets_closed
|
|
||||||
end
|
|
||||||
|
|
||||||
return true if !need_update
|
|
||||||
|
|
||||||
customer.updated_by_id = @updated_by_id
|
|
||||||
customer.save
|
|
||||||
end
|
|
||||||
end
|
|
40
spec/jobs/ticket_user_ticket_counter_job_spec.rb
Normal file
40
spec/jobs/ticket_user_ticket_counter_job_spec.rb
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe TicketUserTicketCounterJob, type: :job do
|
||||||
|
|
||||||
|
let!(:customer) { create(:user) }
|
||||||
|
|
||||||
|
let!(:tickets) do
|
||||||
|
ticket_states = {
|
||||||
|
open: Ticket::State.by_category(:open).first,
|
||||||
|
closed: Ticket::State.by_category(:closed).first,
|
||||||
|
}
|
||||||
|
|
||||||
|
tickets = {
|
||||||
|
open: [
|
||||||
|
create(:ticket, state_id: ticket_states[:open].id, customer_id: customer.id),
|
||||||
|
create(:ticket, state_id: ticket_states[:open].id, customer_id: customer.id),
|
||||||
|
],
|
||||||
|
closed: [
|
||||||
|
create(:ticket, state_id: ticket_states[:closed].id, customer_id: customer.id),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'checks if customer has no ticket count in preferences' do
|
||||||
|
customer.reload
|
||||||
|
expect(customer[:preferences][:tickets_open]).to be_falsey
|
||||||
|
expect(customer[:preferences][:tickets_closed]).to be_falsey
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'checks if customer ticket count has been updated in preferences' do
|
||||||
|
TicketUserTicketCounterJob.perform_now(
|
||||||
|
customer.id,
|
||||||
|
customer.id,
|
||||||
|
)
|
||||||
|
customer.reload
|
||||||
|
|
||||||
|
expect(customer[:preferences][:tickets_open]).to be tickets[:open].count
|
||||||
|
expect(customer[:preferences][:tickets_closed]).to be tickets[:closed].count
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue