Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions app/jobs/destroy_university_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
class DestroyUniversityJob < ApplicationJob
queue_as :whales

OBJECTS_NOT_PARANOID = [

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ça c'est vraiment intéressant, je trouve. Ca devrait être dans un endroit plus structurel, dans le namespace osuny, dans les modèles, je trouve.

Search,
Communication::Media::Context,
Communication::Media::Localization,
Communication::Media,
Communication::Media::Category::Localization,
Communication::Media::Category,
Communication::Media::Collection::Localization,
Communication::Media::Collection,
Communication::Extranet::Document::Localization,
Communication::Extranet::Document,
Communication::Extranet::Document::Category::Localization,
Communication::Extranet::Document::Category,
Communication::Extranet::Document::Kind::Localization,
Communication::Extranet::Document::Kind,
Communication::Extranet::Post::Category::Localization,
Communication::Extranet::Post::Category,
Communication::Extranet::Post::Localization,
Communication::Extranet::Post,
Communication::Extranet::Connection,
Communication::Extranet::Localization,
Communication::Extranet,
Education::Program::Category::Localization,
Education::Program::Category,
University::Organization::Category::Localization,
University::Organization::Category,
University::Person::Category::Localization,
University::Person::Category,
University::App,
EmergencyMessage,
Import
].freeze
OBJECTS_PARANOID = [
Administration::Location::Localization,
Administration::Location,
Education::AcademicYear::Localization,
Education::AcademicYear,
Education::Cohort::Localization,
Education::Cohort,
Education::Diploma::Localization,
Education::Diploma,
Education::Program::Localization,
Education::Program,
Education::School::Localization,
Education::School,
Research::Journal::Paper::Kind::Localization,
Research::Journal::Paper::Kind,
Research::Journal::Volume::Localization,
Research::Journal::Volume,
Research::Journal::Paper::Localization,
Research::Journal::Paper,
Research::Journal::Localization,
Research::Journal,
Research::Laboratory::Axis::Localization,
Research::Laboratory::Axis,
Research::Thesis::Localization,
Research::Thesis,
Research::Laboratory::Localization,
Research::Laboratory,
University::Organization::Localization,
University::Organization,
University::Person::Experience::Localization,
University::Person::Experience,
University::Person::Involvement::Localization,
University::Person::Involvement,
University::Role::Localization,
University::Role,
University::Person::Localization,
University::Person,
Communication::Block # We finish by blocks to avoid foreign key issues
].freeze

def perform(university)
# Destroy all the websites of the university
university.websites.each do |website|
Communication::Website::DestroyWebsiteJob.perform_now(website)
end
OBJECTS_NOT_PARANOID.each do |klass|
klass.where(university_id: university.id).destroy_all
end

# Custom logic for users as we need to prevent server admin from being destroyed of all universities
User.where(university_id: university.id).find_each do |user|
user.skip_server_admin_sync = true if user.server_admin?
user.destroy
end

OBJECTS_PARANOID.each do |klass|
klass.with_deleted
.where(university: university.id)
.find_each(&:really_destroy!)
end
university.destroy
end

end
Loading