Use ActiveJob instead of Resque directly

This allows us to directly pass entities to the job.
This commit is contained in:
Patrick Gansterer 2020-07-31 14:09:45 +02:00
parent 07c8393c8c
commit 47d9c79617
16 changed files with 76 additions and 73 deletions

View file

@ -137,7 +137,7 @@ class OrdersController < ApplicationController
flash[:notice] = (s ? I18n.t('orders.receive.notice', :msg => s) : I18n.t('orders.receive.notice_none'))
end
Resque.enqueue(UserNotifier, FoodsoftConfig.scope, 'received_order', @order.id)
NotifyReceivedOrderJob.perform_later(@order)
if current_user.role_orders? || current_user.role_finance?
redirect_to @order
elsif current_user.role_pickups?

View file

@ -0,0 +1,2 @@
class ApplicationJob < ActiveJob::Base
end

View file

@ -0,0 +1,15 @@
class NotifyFinishedOrderJob < ApplicationJob
def perform(order)
order.group_orders.each do |group_order|
next unless group_order.ordergroup
group_order.ordergroup.users.each do |user|
next unless user.settings.notify['order_finished']
Mailer.deliver_now_with_user_locale user do
Mailer.order_result(user, group_order)
end
end
end
end
end

View file

@ -0,0 +1,11 @@
class NotifyNegativeBalanceJob < ApplicationJob
def perform(ordergroup, transaction)
ordergroup.users.each do |user|
next unless user.settings.notify['negative_balance']
Mailer.deliver_now_with_user_locale user do
Mailer.negative_balance(user, transaction)
end
end
end
end

View file

@ -0,0 +1,15 @@
class NotifyReceivedOrderJob < ApplicationJob
def perform(order)
order.group_orders.each do |group_order|
next unless group_order.ordergroup
group_order.ordergroup.users.each do |user|
next unless user.settings.notify['order_received']
Mailer.deliver_now_with_user_locale user do
Mailer.order_received(user, group_order)
end
end
end
end
end

View file

@ -260,7 +260,7 @@ class Order < ApplicationRecord
ordergroups.each(&:update_stats!)
# Notifications
Resque.enqueue(UserNotifier, FoodsoftConfig.scope, 'finished_order', self.id)
NotifyFinishedOrderJob.perform_later(self)
end
end
end

View file

@ -89,7 +89,7 @@ class Ordergroup < Group
update_balance!
# Notify only when order group had a positive balance before the last transaction:
if t.amount < 0 && self.account_balance < 0 && self.account_balance - t.amount >= 0
Resque.enqueue(UserNotifier, FoodsoftConfig.scope, 'negative_balance', self.id, t.id)
NotifyNegativeBalanceJob.perform_later(self, t)
end
t
end

View file

@ -1,55 +0,0 @@
# This plain ruby class should handle all user notifications, called by various models
class UserNotifier
@queue = :foodsoft_notifier
# Resque style method to perform every class method defined here
def self.perform(foodcoop, method_name, *args)
FoodsoftConfig.select_foodcoop(foodcoop) if FoodsoftConfig[:multi_coop_install]
self.send method_name, args
end
def self.finished_order(args)
order_id = args.first
Order.find(order_id).group_orders.each do |group_order|
next if group_order.ordergroup.nil?
group_order.ordergroup.users.each do |user|
if user.settings.notify['order_finished']
Mailer.deliver_now_with_user_locale user do
Mailer.order_result(user, group_order)
end
end
end
end
end
def self.received_order(args)
order_id = args.first
Order.find(order_id).group_orders.each do |group_order|
next if group_order.ordergroup.nil?
group_order.ordergroup.users.each do |user|
next unless user.settings.notify['order_received']
Mailer.deliver_now_with_user_locale user do
Mailer.order_received(user, group_order)
end
end
end
end
# If this order group's account balance is made negative by the given/last transaction,
# a message is sent to all users who have enabled notification.
def self.negative_balance(args)
ordergroup_id, transaction_id = args
transaction = FinancialTransaction.find transaction_id
Ordergroup.find(ordergroup_id).users.each do |user|
if user.settings.notify['negative_balance']
Mailer.deliver_now_with_user_locale user do
Mailer.negative_balance(user, transaction)
end
end
end
end
end