Merge pull request #5977 from okriuchykhin/ok_SCI_9053

Pass user by id instead of serialized object for deleyed jobs [SCI-9053]
This commit is contained in:
Alex Kriuchykhin 2023-08-11 16:01:02 +02:00 committed by GitHub
commit a08e51a7bc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
33 changed files with 67 additions and 61 deletions

View file

@ -29,9 +29,9 @@ module AccessPermissions
UserAssignments::PropagateAssignmentJob.perform_later(
@experiment,
@user_assignment.user,
@user_assignment.user.id,
@user_assignment.user_role,
current_user
current_user.id
)
log_change_activity

View file

@ -174,9 +174,9 @@ module AccessPermissions
def propagate_job(user_assignment, destroy: false)
UserAssignments::PropagateAssignmentJob.perform_later(
@project,
user_assignment.user,
user_assignment.user.id,
user_assignment.user_role,
current_user,
current_user.id,
destroy: destroy
)
end

View file

@ -10,7 +10,7 @@ module Api
valid_url?(projects_json_export_params[:callback_url])
ProjectsJsonExportJob.perform_later(projects_json_export_params[:task_ids],
projects_json_export_params[:callback_url],
current_user)
current_user.id)
render json: { status: :ok }, status: :accepted
end

View file

@ -502,7 +502,7 @@ class ExperimentsController < ApplicationController
}.merge(new_my_module.get_new_position)
)
new_my_module.designated_users << current_user
MyModules::CopyContentJob.perform_later(current_user, my_module.id, new_my_module.id)
MyModules::CopyContentJob.perform_later(current_user.id, my_module.id, new_my_module.id)
end
@experiment.workflowimg.purge
end

View file

@ -184,7 +184,7 @@ class ReportsController < ApplicationController
log_activity(:generate_docx_report)
ensure_report_template!
Reports::DocxJob.perform_later(@report.id, current_user, root_url)
Reports::DocxJob.perform_later(@report.id, current_user.id, root_url)
render json: {
message: I18n.t('projects.reports.index.generation.accepted_message')
}
@ -399,7 +399,7 @@ class ReportsController < ApplicationController
log_activity(:generate_pdf_report)
ensure_report_template!
Reports::PdfJob.perform_later(@report.id, current_user)
Reports::PdfJob.perform_later(@report.id, current_user.id)
end
def ensure_report_template!

View file

@ -108,7 +108,7 @@ class RepositoriesController < ApplicationController
end
# offload the rest to background job
HideRepositoryRemindersJob.perform_later(@repository, current_user)
HideRepositoryRemindersJob.perform_later(@repository, current_user.id)
render json: { status: :ok }, status: :accepted
end
@ -349,7 +349,7 @@ class RepositoriesController < ApplicationController
repositories = Repository.viewable_by_user(current_user, current_team).where(id: params[:repository_ids])
if repositories.present? && current_user.has_available_exports?
current_user.increase_daily_exports_counter!
RepositoriesExportJob.perform_later(repositories.pluck(:id), current_user, current_team)
RepositoriesExportJob.perform_later(repositories.pluck(:id), current_user.id, current_team)
render json: { message: t('zip_export.export_request_success') }
else
render json: { message: t('zip_export.export_error') }, status: :unprocessable_entity

View file

@ -132,7 +132,7 @@ class TeamsController < ApplicationController
options = { team: @team }
zip = TeamZipExport.create(user: current_user)
zip.generate_exportable_zip(
current_user,
current_user.id,
ids,
:teams,
options

View file

@ -1,6 +1,6 @@
module NotificationsHelper
def send_email_notification(user, notification)
AppMailer.delay.notification(user, notification)
AppMailer.delay.notification(user.id, notification)
end
# generate assignment notification

View file

@ -3,7 +3,8 @@
class HideRepositoryRemindersJob < ApplicationJob
queue_as :high_priority
def perform(repository, user)
def perform(repository, user_id)
user = User.find(user_id)
hidden_reminder_repository_cell_ids =
HiddenRepositoryCellReminder.joins(repository_cell: { repository_row: :repository })
.where(user: user)

View file

@ -2,7 +2,8 @@
module MyModules
class CopyContentJob < ApplicationJob
def perform(user, source_my_module_id, target_my_module_id)
def perform(user_id, source_my_module_id, target_my_module_id)
user = User.find(user_id)
target_my_module = MyModule.find(target_my_module_id)
MyModule.transaction do
MyModule.find(source_my_module_id).copy_content(user, target_my_module)

View file

@ -1,7 +1,8 @@
# frozen_string_literal: true
class ProjectsJsonExportJob < ApplicationJob
def perform(task_ids, callback, user)
def perform(task_ids, callback, user_id)
user = User.find(user_id)
projects_json_export_service = ProjectsJsonExportService.new(task_ids,
callback,
user)

View file

@ -21,7 +21,7 @@ module Reports
else
Rails.application.routes.url_helpers.reports_path(team: report.team.id)
end
user = job.arguments.second
user = User.find(job.arguments.second)
notification = Notification.create(
type_of: :deliver_error,
title: I18n.t('projects.reports.index.generation.error_docx_notification_title'),
@ -33,8 +33,9 @@ module Reports
Rails.logger.error("Couldn't generate DOCX for Report with id: #{report.id}. Error:\n #{error}")
end
def perform(report_id, user, root_url)
def perform(report_id, user_id, root_url)
report = Report.find(report_id)
user = User.find(user_id)
file = Tempfile.new(['report', '.docx'])
begin
I18n.backend.date_format = user.settings[:date_format]

View file

@ -25,7 +25,7 @@ module Reports
else
Rails.application.routes.url_helpers.reports_path(team: report.team.id)
end
user = job.arguments.second
user = User.find(job.arguments.second)
notification = Notification.create(
type_of: :deliver_error,
title: I18n.t('projects.reports.index.generation.error_pdf_notification_title'),
@ -39,8 +39,9 @@ module Reports
PREVIEW_EXTENSIONS = %w(docx pdf).freeze
def perform(report_id, user)
def perform(report_id, user_id)
report = Report.find(report_id)
user = User.find(user_id)
file = Tempfile.new(['report', '.pdf'], binmode: true)
begin
template =

View file

@ -3,8 +3,8 @@
class RepositoriesExportJob < ApplicationJob
include StringUtility
def perform(repository_ids, user, team)
@user = user
def perform(repository_ids, user_id, team)
@user = User.find(user_id)
@team = team
@repositories = Repository.viewable_by_user(@user, @team).where(id: repository_ids).order(:id)
zip_input_dir = FileUtils.mkdir_p(Rails.root.join("tmp/temp_zip_#{Time.now.to_i}")).first

View file

@ -4,8 +4,8 @@ module UserAssignments
class GenerateUserAssignmentsJob < ApplicationJob
queue_as :high_priority
def perform(object, assigned_by)
@assigned_by = assigned_by
def perform(object, assigned_by_id)
@assigned_by = User.find_by(id: assigned_by_id)
ActiveRecord::Base.transaction do
case object
when Experiment

View file

@ -4,9 +4,9 @@ module UserAssignments
class ProjectGroupAssignmentJob < ApplicationJob
queue_as :high_priority
def perform(team, project, assigned_by)
def perform(team, project, assigned_by_id)
@team = team
@assigned_by = assigned_by
@assigned_by = User.find_by(id: assigned_by_id)
return unless project.visible?
@ -27,9 +27,9 @@ module UserAssignments
# make sure all related experiments and my modules are assigned
UserAssignments::PropagateAssignmentJob.perform_later(
project,
user,
user.id,
project.default_public_user_role || UserRole.find_predefined_viewer_role,
@assigned_by
@assigned_by.id
)
end
end

View file

@ -4,10 +4,10 @@ module UserAssignments
class PropagateAssignmentJob < ApplicationJob
queue_as :high_priority
def perform(resource, user, user_role, assigned_by, options = {})
@user = user
def perform(resource, user_id, user_role, assigned_by_id, options = {})
@user = User.find(user_id)
@user_role = user_role
@assigned_by = assigned_by
@assigned_by = User.find_by(id: assigned_by_id)
@destroy = options.fetch(:destroy, false)
@remove_from_team = options.fetch(:remove_from_team, false)
@resource = resource

View file

@ -7,8 +7,8 @@ class AppMailer < Devise::Mailer
default from: ENV['MAIL_FROM']
default reply: ENV['MAIL_REPLYTO']
def notification(user, notification, opts = {})
@user = user
def notification(user_id, notification, opts = {})
@user = User.find(user_id)
@notification = notification
subject =
if notification.deliver?
@ -23,8 +23,8 @@ class AppMailer < Devise::Mailer
mail(headers)
end
def system_notification(user, system_notification, opts = {})
@user = user
def system_notification(user_id, system_notification, opts = {})
@user = User.find(user_id)
@system_notification = system_notification
headers = {

View file

@ -73,7 +73,7 @@ module Assignable
user_role: role
)
UserAssignments::GenerateUserAssignmentsJob.perform_later(self, created_by)
UserAssignments::GenerateUserAssignmentsJob.perform_later(self, created_by.id)
end
end
end

View file

@ -353,7 +353,7 @@ class Experiment < ApplicationRecord
# regenerate user assignments
my_module.user_assignments.destroy_all
UserAssignments::GenerateUserAssignmentsJob.perform_later(my_module, current_user)
UserAssignments::GenerateUserAssignmentsJob.perform_later(my_module, current_user.id)
Activities::CreateActivityService.call(activity_type: :move_task,
owner: current_user,
@ -410,7 +410,7 @@ class Experiment < ApplicationRecord
# regenerate user assignments
m.user_assignments.destroy_all
UserAssignments::GenerateUserAssignmentsJob.new(m, current_user).perform_now
UserAssignments::GenerateUserAssignmentsJob.new(m, current_user.id).perform_now
# Add activity
Activities::CreateActivityService.call(

View file

@ -341,7 +341,7 @@ class Project < ApplicationRecord
UserAssignments::ProjectGroupAssignmentJob.perform_later(
team,
self,
last_modified_by || created_by
last_modified_by&.id || created_by&.id
)
end

View file

@ -6,8 +6,8 @@ require 'csv'
class TeamZipExport < ZipExport
include StringUtility
def generate_exportable_zip(user, data, type, options = {})
@user = user
def generate_exportable_zip(user_id, data, type, options = {})
@user = User.find(user_id)
zip_input_dir = FileUtils.mkdir_p(
File.join(Rails.root, "tmp/temp_zip_#{Time.now.to_i}")
).first

View file

@ -45,7 +45,8 @@ class ZipExport < ApplicationRecord
end
end
def generate_exportable_zip(user, data, type, options = {})
def generate_exportable_zip(user_id, data, type, options = {})
user = User.find(user_id)
I18n.backend.date_format = user.settings[:date_format] || Constants::DEFAULT_DATE_FORMAT
zip_input_dir = FileUtils.mkdir_p(File.join(Rails.root, "tmp/temp_zip_#{Time.now.to_i}")).first
tmp_zip_dir = FileUtils.mkdir_p(File.join(Rails.root, 'tmp/zip-ready')).first

View file

@ -118,7 +118,7 @@ module Experiments
user_role: @project.user_assignments.find_by(user: @user).user_role
)
UserAssignments::GenerateUserAssignmentsJob.perform_later(object, @user)
UserAssignments::GenerateUserAssignmentsJob.perform_later(object, @user.id)
end
def clean_up_user_my_modules(my_module)

View file

@ -14,7 +14,7 @@ module Notifications
def call
@system_notification.user_system_notifications.find_each do |usn|
user = usn.user
AppMailer.delay.system_notification(user, @system_notification) if user.system_message_email_notification
AppMailer.delay.system_notification(user.id, @system_notification) if user.system_message_email_notification
end
self

View file

@ -30,7 +30,7 @@ module RepositoryZipExport
zip = ZipExport.create(user: current_user)
zip.generate_exportable_zip(
current_user,
current_user.id,
to_csv(rows, params[:header_ids], current_user, repository, nil, params[:my_module_id].present?),
:repositories
)

View file

@ -188,9 +188,9 @@ class TeamImporter
# handle the permissions for newly created experiment
user = User.find(user_id)
UserAssignments::GenerateUserAssignmentsJob.perform_now(experiment, user)
UserAssignments::GenerateUserAssignmentsJob.perform_now(experiment, user.id)
experiment.my_modules.find_each do |my_module|
UserAssignments::GenerateUserAssignmentsJob.perform_now(my_module, user)
UserAssignments::GenerateUserAssignmentsJob.perform_now(my_module, user.id)
end
puts "Imported experiment: #{experiment.id}"
return experiment

View file

@ -24,7 +24,7 @@ module UserAssignments
UserAssignments::ProjectGroupAssignmentJob.perform_later(
@team,
project,
@assigned_by
@assigned_by.id
)
end
end

View file

@ -10,7 +10,7 @@ module UserAssignments
def call
@team.projects.find_each do |project|
UserAssignments::PropagateAssignmentJob
.perform_now(project, @user, nil, nil, destroy: true, remove_from_team: true)
.perform_now(project, @user.id, nil, nil, destroy: true, remove_from_team: true)
end
remove_repositories_assignments
remove_protocols_assignments

View file

@ -30,7 +30,7 @@ module UserAssignments
end
it 'assigns the same role as the user had on project level' do
described_class.perform_now(experiment, user_one)
described_class.perform_now(experiment, user_one.id)
user_two_assignment = UserAssignment.find_by(user: user_two, assignable: experiment)
user_three_assignment = UserAssignment.find_by(user: user_three, assignable: experiment)
expect(user_two_assignment.user_role).to eq viewer_role
@ -49,7 +49,7 @@ module UserAssignments
end
it 'assigns the same role as the user had on project level' do
described_class.perform_now(my_module, user_one)
described_class.perform_now(my_module, user_one.id)
user_two_assignment = UserAssignment.find_by(user: user_two, assignable: my_module)
user_three_assignment = UserAssignment.find_by(user: user_three, assignable: my_module)
expect(user_two_assignment.user_role).to eq viewer_role

View file

@ -19,12 +19,12 @@ module UserAssignments
describe 'perform' do
it 'propagates the user assignments to project child object' do
expect {
described_class.perform_now(project, user_two, technician_role, user_one)
described_class.perform_now(project, user_two.id, technician_role, user_one.id)
}.to change(UserAssignment, :count).by(4)
end
it 'propagates the user assignments to project child object with the same role' do
described_class.perform_now(project, user_two, technician_role, user_one)
described_class.perform_now(project, user_two.id, technician_role, user_one.id)
[
UserAssignment.find_by(user: user_two, assignable: experiment_one),
UserAssignment.find_by(user: user_two, assignable: experiment_two),
@ -53,7 +53,7 @@ module UserAssignments
user_role: owner_role,
assigned_by: user_one,
assigned: :manually
described_class.perform_now(project, user_two, technician_role, user_one)
described_class.perform_now(project, user_two.id, technician_role, user_one.id)
expect(experiment_assignment.reload.user_role).to eq owner_role
end
@ -64,7 +64,7 @@ module UserAssignments
user_role: owner_role,
assigned_by: user_one,
assigned: :automatically
described_class.perform_now(project, user_two, technician_role, user_one)
described_class.perform_now(project, user_two.id, technician_role, user_one.id)
expect(experiment_assignment.reload.user_role).to eq technician_role
end
end

View file

@ -30,7 +30,7 @@ describe ProjectMember, type: :model do
it 'triggers the UserAssignments::PropagateAssignmentJob job' do
subject.user_role_id = normal_user_role.id
expect(UserAssignments::PropagateAssignmentJob).to receive(:perform_later).with(
project, user, normal_user_role, user
project, user.id, normal_user_role, user.id
)
subject.update
end
@ -74,7 +74,7 @@ describe ProjectMember, type: :model do
it 'triggers the UserAssignments::PropagateAssignmentJob job' do
expect(UserAssignments::PropagateAssignmentJob).to receive(:perform_later).with(
project, user, owner_role, user, destroy: true
project, user.id, owner_role, user.id, destroy: true
)
subject.destroy
end

View file

@ -17,7 +17,7 @@ class AppMailerPreview < ActionMailer::Preview
def assignment_notification
AppMailer.notification(
fake_user,
fake_user.id,
Notification.new(
type_of: :assignment,
title: I18n.t(
@ -40,7 +40,7 @@ class AppMailerPreview < ActionMailer::Preview
user = User.first
user = fake_user if user.blank?
AppMailer.notification(
user,
user.id,
Notification.new(
type_of: :recent_changes,
title: I18n.t(
@ -60,7 +60,7 @@ class AppMailerPreview < ActionMailer::Preview
# <b>DEPRECATED:</b> Please use <tt>system_notification</tt> instead.
def system_message_notification
AppMailer.notification(
fake_user,
fake_user.id,
Notification.new(
type_of: :system_message,
title: 'SciNote 9.1 released!',
@ -72,7 +72,7 @@ class AppMailerPreview < ActionMailer::Preview
def delivery_notification
AppMailer.notification(
fake_user,
fake_user.id,
Notification.new(
type_of: :deliver,
title: 'Your requested export package is ready!',
@ -86,7 +86,7 @@ class AppMailerPreview < ActionMailer::Preview
def system_notification
sn = FactoryBot.build(:system_notification)
user = FactoryBot.build(:user)
AppMailer.system_notification(user, sn)
AppMailer.system_notification(user.id, sn)
end
private