Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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
2 changes: 2 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ inherit_from: .rubocop_todo.yml

require:
- standard

plugins:
- rubocop-rails

inherit_gem:
Expand Down
4 changes: 2 additions & 2 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -491,10 +491,10 @@ GEM
net-protocol
net-ssh (7.3.0)
nio4r (2.7.4)
nokogiri (1.18.4)
nokogiri (1.18.8)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
nokogiri (1.18.4-x86_64-linux-gnu)
nokogiri (1.18.8-x86_64-linux-gnu)
racc (~> 1.4)
oj (3.16.10)
bigdecimal (>= 3.0)
Expand Down
81 changes: 81 additions & 0 deletions lib/tasks/documents.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
namespace :documents do
desc "Removing documents completely"
task remove: :environment do
for_real = ENV["FOR_REAL"] == "true"
docs_to_remove = (ENV["DOCS"] || "").split(",")
files_to_remove = (ENV["FILES"] || "").split(",")

abort "Please provide documents (DOCS) to remove or files (FILES)" if docs_to_remove.empty? && files_to_remove.empty?
abort "You should provide either DOCS or FILES" if docs_to_remove.any? && files_to_remove.any?

puts "RUNNING FOR REAL" if for_real
puts "DRY RUN" unless for_real

if docs_to_remove.any?
puts "This script will remove #{docs_to_remove.count} documents"
end

if files_to_remove.any?
puts "This script will remove #{files_to_remove.count} files with associated operator documents and histories"
end

ActiveRecord::Base.transaction do
docs = if docs_to_remove.any?
OperatorDocument.unscoped.where(id: docs_to_remove)
else
OperatorDocument.unscoped.where(document_file_id: files_to_remove)
end
histories = if docs_to_remove.any?
OperatorDocumentHistory.unscoped.where(operator_document_id: docs_to_remove)
else
OperatorDocumentHistory.unscoped.where(document_file_id: files_to_remove).or(
OperatorDocumentHistory.unscoped.where(operator_document_id: docs)
)
end
operator_ids = (docs.pluck(:operator_id) + histories.pluck(:operator_id)).uniq
versions = PaperTrail::Version.where(item: docs)
if files_to_remove.any?
versions_with_document_id = files_to_remove.map { |id| "object LIKE '%document_file_id: #{id.to_i}%'" }.join(" OR ")
versions = versions.or(PaperTrail::Version.where(item_type: "OperatorDocument").where(versions_with_document_id))
end

files = DocumentFile.where(id: docs.pluck(:document_file_id) + histories.pluck(:document_file_id))
if for_real
files.each do |file|
puts "Removing file #{file.id}"
file.destroy!
end
else
puts "Removing files... #{files.delete_all} affected"
end

annexes = OperatorDocumentAnnex.where(id: AnnexDocument
.where(documentable: histories)
.or(AnnexDocument.where(documentable: docs))
.select(:operator_document_annex_id))

if for_real
annexes.each do |annex|
puts "Removing annex #{annex.id}"
annex.really_destroy!
end
else
puts "Removing annexes... #{annexes.delete_all} affected"
end

puts "Removing versions... #{versions.delete_all} affected"
puts "Removing histories... #{histories.delete_all} affected"
puts "Removing docs... #{docs.delete_all} affected"

if operator_ids.any?
puts "Syncing scores..."
puts "Only for operators: #{operator_ids.join(", ")}"
SyncTasks.new(as_rake_task: false).sync_scores(operator_id: operator_ids)
puts "Refreshing ranking..."
RankingOperatorDocument.refresh
end

raise ActiveRecord::Rollback unless for_real
end
end
end
54 changes: 0 additions & 54 deletions lib/tasks/fix_one_time.rake
Original file line number Diff line number Diff line change
Expand Up @@ -56,60 +56,6 @@ namespace :fix_one_time do
end
end

desc "Removing documents completely"
task remove_docs: :environment do
for_real = ENV["FOR_REAL"] == "true"
docs_to_remove = (ENV["DOCS"] || "").split(",")

puts "RUNNING FOR REAL" if for_real
puts "DRY RUN" unless for_real

puts "This script will remove #{docs_to_remove.count} documents"

ActiveRecord::Base.transaction do
docs = OperatorDocument.unscoped.where(id: docs_to_remove)
operator_ids = docs.pluck(:operator_id).uniq
histories = OperatorDocumentHistory.unscoped.where(operator_document_id: docs_to_remove)
versions = PaperTrail::Version.where(item: docs)

files = DocumentFile.where(id: docs.pluck(:document_file_id) + histories.pluck(:document_file_id))
if for_real
files.each do |file|
puts "Removing file #{file.id}"
file.destroy!
end
else
puts "Removing files... #{files.delete_all} affected"
end

annexes = OperatorDocumentAnnex.where(id: AnnexDocument
.where(documentable: histories)
.or(AnnexDocument.where(documentable: docs))
.select(:operator_document_annex_id))

if for_real
annexes.each do |annex|
puts "Removing annex #{annex.id}"
annex.really_destroy!
end
else
puts "Removing annexes... #{annexes.delete_all} affected"
end

puts "Removing versions... #{versions.delete_all} affected"
puts "Removing histories... #{histories.delete_all} affected"
puts "Removing docs... #{docs.delete_all} affected"

puts "Syncing scores..."
puts "Only for operators: #{operator_ids.join(", ")}"
SyncTasks.new(as_rake_task: false).sync_scores(operator_id: operator_ids)
puts "Refreshing ranking..."
RankingOperatorDocument.refresh

raise ActiveRecord::Rollback unless for_real
end
end

desc "Re-assign uploaded attachment to observation reports"
task observation_report_attachments: :environment do
# context
Expand Down
Loading