Skip to content

Commit d2009be

Browse files
committed
Merge branch 'feature/improve-documents-removal-script' into staging
2 parents d1d4080 + 2fff406 commit d2009be

File tree

4 files changed

+83
-56
lines changed

4 files changed

+83
-56
lines changed

.rubocop.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ inherit_from: .rubocop_todo.yml
22

33
require:
44
- standard
5+
6+
plugins:
57
- rubocop-rails
68

79
inherit_gem:

Gemfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -491,10 +491,10 @@ GEM
491491
net-protocol
492492
net-ssh (7.3.0)
493493
nio4r (2.7.4)
494-
nokogiri (1.18.4)
494+
nokogiri (1.18.8)
495495
mini_portile2 (~> 2.8.2)
496496
racc (~> 1.4)
497-
nokogiri (1.18.4-x86_64-linux-gnu)
497+
nokogiri (1.18.8-x86_64-linux-gnu)
498498
racc (~> 1.4)
499499
oj (3.16.10)
500500
bigdecimal (>= 3.0)

lib/tasks/documents.rake

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
namespace :documents do
2+
desc "Removing documents completely"
3+
task remove: :environment do
4+
for_real = ENV["FOR_REAL"] == "true"
5+
docs_to_remove = (ENV["DOCS"] || "").split(",")
6+
files_to_remove = (ENV["FILES"] || "").split(",")
7+
8+
abort "Please provide documents (DOCS) to remove or files (FILES)" if docs_to_remove.empty? && files_to_remove.empty?
9+
abort "You should provide either DOCS or FILES" if docs_to_remove.any? && files_to_remove.any?
10+
11+
puts "RUNNING FOR REAL" if for_real
12+
puts "DRY RUN" unless for_real
13+
14+
if docs_to_remove.any?
15+
puts "This script will remove #{docs_to_remove.count} documents"
16+
end
17+
18+
if files_to_remove.any?
19+
puts "This script will remove #{files_to_remove.count} files with associated operator documents and histories"
20+
end
21+
22+
ActiveRecord::Base.transaction do
23+
docs = if docs_to_remove.any?
24+
OperatorDocument.unscoped.where(id: docs_to_remove)
25+
else
26+
OperatorDocument.unscoped.where(document_file_id: files_to_remove)
27+
end
28+
histories = if docs_to_remove.any?
29+
OperatorDocumentHistory.unscoped.where(operator_document_id: docs_to_remove)
30+
else
31+
OperatorDocumentHistory.unscoped.where(document_file_id: files_to_remove).or(
32+
OperatorDocumentHistory.unscoped.where(operator_document_id: docs)
33+
)
34+
end
35+
operator_ids = (docs.pluck(:operator_id) + histories.pluck(:operator_id)).uniq
36+
versions = PaperTrail::Version.where(item: docs)
37+
if files_to_remove.any?
38+
versions_with_document_id = files_to_remove.map { |id| "object LIKE '%document_file_id: #{id.to_i}%'" }.join(" OR ")
39+
versions = versions.or(PaperTrail::Version.where(item_type: "OperatorDocument").where(versions_with_document_id))
40+
end
41+
42+
files = DocumentFile.where(id: docs.pluck(:document_file_id) + histories.pluck(:document_file_id))
43+
if for_real
44+
files.each do |file|
45+
puts "Removing file #{file.id}"
46+
file.destroy!
47+
end
48+
else
49+
puts "Removing files... #{files.delete_all} affected"
50+
end
51+
52+
annexes = OperatorDocumentAnnex.where(id: AnnexDocument
53+
.where(documentable: histories)
54+
.or(AnnexDocument.where(documentable: docs))
55+
.select(:operator_document_annex_id))
56+
57+
if for_real
58+
annexes.each do |annex|
59+
puts "Removing annex #{annex.id}"
60+
annex.really_destroy!
61+
end
62+
else
63+
puts "Removing annexes... #{annexes.delete_all} affected"
64+
end
65+
66+
puts "Removing versions... #{versions.delete_all} affected"
67+
puts "Removing histories... #{histories.delete_all} affected"
68+
puts "Removing docs... #{docs.delete_all} affected"
69+
70+
puts "Syncing scores..."
71+
puts "Only for operators: #{operator_ids.join(", ")}"
72+
SyncTasks.new(as_rake_task: false).sync_scores(operator_id: operator_ids)
73+
puts "Refreshing ranking..."
74+
RankingOperatorDocument.refresh
75+
76+
raise ActiveRecord::Rollback unless for_real
77+
end
78+
end
79+
end

lib/tasks/fix_one_time.rake

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -56,60 +56,6 @@ namespace :fix_one_time do
5656
end
5757
end
5858

59-
desc "Removing documents completely"
60-
task remove_docs: :environment do
61-
for_real = ENV["FOR_REAL"] == "true"
62-
docs_to_remove = (ENV["DOCS"] || "").split(",")
63-
64-
puts "RUNNING FOR REAL" if for_real
65-
puts "DRY RUN" unless for_real
66-
67-
puts "This script will remove #{docs_to_remove.count} documents"
68-
69-
ActiveRecord::Base.transaction do
70-
docs = OperatorDocument.unscoped.where(id: docs_to_remove)
71-
operator_ids = docs.pluck(:operator_id).uniq
72-
histories = OperatorDocumentHistory.unscoped.where(operator_document_id: docs_to_remove)
73-
versions = PaperTrail::Version.where(item: docs)
74-
75-
files = DocumentFile.where(id: docs.pluck(:document_file_id) + histories.pluck(:document_file_id))
76-
if for_real
77-
files.each do |file|
78-
puts "Removing file #{file.id}"
79-
file.destroy!
80-
end
81-
else
82-
puts "Removing files... #{files.delete_all} affected"
83-
end
84-
85-
annexes = OperatorDocumentAnnex.where(id: AnnexDocument
86-
.where(documentable: histories)
87-
.or(AnnexDocument.where(documentable: docs))
88-
.select(:operator_document_annex_id))
89-
90-
if for_real
91-
annexes.each do |annex|
92-
puts "Removing annex #{annex.id}"
93-
annex.really_destroy!
94-
end
95-
else
96-
puts "Removing annexes... #{annexes.delete_all} affected"
97-
end
98-
99-
puts "Removing versions... #{versions.delete_all} affected"
100-
puts "Removing histories... #{histories.delete_all} affected"
101-
puts "Removing docs... #{docs.delete_all} affected"
102-
103-
puts "Syncing scores..."
104-
puts "Only for operators: #{operator_ids.join(", ")}"
105-
SyncTasks.new(as_rake_task: false).sync_scores(operator_id: operator_ids)
106-
puts "Refreshing ranking..."
107-
RankingOperatorDocument.refresh
108-
109-
raise ActiveRecord::Rollback unless for_real
110-
end
111-
end
112-
11359
desc "Re-assign uploaded attachment to observation reports"
11460
task observation_report_attachments: :environment do
11561
# context

0 commit comments

Comments
 (0)