app/services/schools/delete_service.rb
module Schools
class DeleteService
def initialize(school)
@school = school
end
def execute
School.transaction do
delete_school_strings
delete_school_links
delete_school_admins
delete_courses
delete_communities
delete_taggings
delete_markdown_attachments
delete_domains
delete_audit_records
delete_organisations
delete_users
delete_school_standings
@school.reload.destroy!
end
end
alias perform execute
private
def delete_school_strings
@school.school_strings.delete_all
end
def delete_school_links
@school.school_links.delete_all
end
def delete_school_admins
@school.school_admins.delete_all
end
def delete_courses
@school.courses.each do |course|
::Courses::DeleteService.new(course).execute
end
end
def delete_communities
@school.communities.each do |community|
::Communities::DeleteService.new(community).execute
end
end
def delete_taggings
ActsAsTaggableOn::Tagging
.where(taggable_type: "School")
.where(taggable_id: @school.id)
.delete_all
end
def delete_markdown_attachments
@school.markdown_attachments.each(&:destroy!)
end
def delete_domains
@school.domains.delete_all
end
def delete_audit_records
@school.audit_records.delete_all
end
def delete_users
Faculty.joins(user: :school).where(schools: { id: @school.id }).delete_all
@school.users.each(&:destroy!)
end
def delete_organisations
@school.users.update_all(organisation_id: nil) # rubocop:disable Rails/SkipsModelValidations
@school.organisations.each do |organisation|
organisation.organisation_admins.destroy_all
end
@school.organisations.delete_all
end
def delete_school_standings
@school.standings.delete_all
end
end
end