Skip to content

Commit 7fc328c

Browse files
committed
improve documents removal script by ability to remove by file ids
1 parent 03eb642 commit 7fc328c

File tree

2 files changed

+136
-54
lines changed

2 files changed

+136
-54
lines changed

lib/tasks/documents.rake

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
namespace :documents do
2+
desc "Removing certain document versions from history"
3+
task remove_documents: :environment do
4+
for_real = ENV["FOR_REAL"] == "true"
5+
6+
# documents_to_remove = (ENV["DOCS"] || "").split(",")
7+
files_to_remove = (ENV["FILES"] || "").split(",")
8+
# histories_to_remove = (ENV["HISTORIES"] || "").split(",")
9+
10+
puts "RUNNING FOR REAL" if for_real
11+
puts "DRY RUN" unless for_real
12+
13+
puts "This script will remove #{files_to_remove.count} files with associated operator documents and histories"
14+
15+
ActiveRecord::Base.transaction do
16+
docs = OperatorDocument.unscoped.where(document_file_id: files_to_remove)
17+
histories = OperatorDocumentHistory.unscoped.where(document_file_id: files_to_remove).or(
18+
OperatorDocumentHistory.unscoped.where(operator_document_id: docs)
19+
)
20+
operator_ids = histories.pluck(:operator_id).uniq
21+
versions = PaperTrail::Version.where(item: docs)
22+
23+
files = DocumentFile.where(id: histories.pluck(:document_file_id))
24+
if for_real
25+
files.each do |file|
26+
puts "Removing file #{file.id}"
27+
file.destroy!
28+
end
29+
else
30+
puts "Removing files... #{files.delete_all} affected"
31+
end
32+
33+
annexes = OperatorDocumentAnnex.where(id: AnnexDocument
34+
.where(documentable: histories)
35+
.or(AnnexDocument.where(documentable: docs))
36+
.select(:operator_document_annex_id))
37+
38+
if for_real
39+
annexes.each do |annex|
40+
puts "Removing annex #{annex.id}"
41+
annex.really_destroy!
42+
end
43+
else
44+
puts "Removing annexes... #{annexes.delete_all} affected"
45+
end
46+
47+
puts "Removing versions... #{versions.delete_all} affected"
48+
puts "Removing histories... #{histories.delete_all} affected"
49+
puts "Removing docs... #{docs.delete_all} affected"
50+
51+
if operator_ids.any?
52+
puts "Syncing scores..."
53+
puts "Only for operators: #{operator_ids.join(", ")}"
54+
SyncTasks.new(as_rake_task: false).sync_scores(operator_id: operator_ids)
55+
puts "Refreshing ranking..."
56+
RankingOperatorDocument.refresh
57+
end
58+
59+
raise ActiveRecord::Rollback unless for_real
60+
end
61+
end
62+
63+
desc "Removing documents completely"
64+
task remove: :environment do
65+
for_real = ENV["FOR_REAL"] == "true"
66+
docs_to_remove = (ENV["DOCS"] || "").split(",")
67+
files_to_remove = (ENV["FILES"] || "").split(",")
68+
69+
abort "Please provide documents (DOCS) to remove or files (FILES)" if docs_to_remove.empty? && files_to_remove.empty?
70+
abort "You should provide either DOCS or FILES" if docs_to_remove.any? && files_to_remove.any?
71+
72+
puts "RUNNING FOR REAL" if for_real
73+
puts "DRY RUN" unless for_real
74+
75+
if docs_to_remove.any?
76+
puts "This script will remove #{docs_to_remove.count} documents"
77+
end
78+
79+
if files_to_remove.any?
80+
puts "This script will remove #{files_to_remove.count} files with associated operator documents and histories"
81+
end
82+
83+
ActiveRecord::Base.transaction do
84+
docs = if docs_to_remove.any?
85+
OperatorDocument.unscoped.where(id: docs_to_remove)
86+
else
87+
OperatorDocument.unscoped.where(document_file_id: files_to_remove)
88+
end
89+
histories = if docs_to_remove.any?
90+
OperatorDocumentHistory.unscoped.where(operator_document_id: docs_to_remove)
91+
else
92+
OperatorDocumentHistory.unscoped.where(document_file_id: files_to_remove).or(
93+
OperatorDocumentHistory.unscoped.where(operator_document_id: docs)
94+
)
95+
end
96+
operator_ids = (docs.pluck(:operator_id) + histories.pluck(:operator_id)).uniq
97+
versions = PaperTrail::Version.where(item: docs)
98+
99+
files = DocumentFile.where(id: docs.pluck(:document_file_id) + histories.pluck(:document_file_id))
100+
if for_real
101+
files.each do |file|
102+
puts "Removing file #{file.id}"
103+
file.destroy!
104+
end
105+
else
106+
puts "Removing files... #{files.delete_all} affected"
107+
end
108+
109+
annexes = OperatorDocumentAnnex.where(id: AnnexDocument
110+
.where(documentable: histories)
111+
.or(AnnexDocument.where(documentable: docs))
112+
.select(:operator_document_annex_id))
113+
114+
if for_real
115+
annexes.each do |annex|
116+
puts "Removing annex #{annex.id}"
117+
annex.really_destroy!
118+
end
119+
else
120+
puts "Removing annexes... #{annexes.delete_all} affected"
121+
end
122+
123+
puts "Removing versions... #{versions.delete_all} affected"
124+
puts "Removing histories... #{histories.delete_all} affected"
125+
puts "Removing docs... #{docs.delete_all} affected"
126+
127+
puts "Syncing scores..."
128+
puts "Only for operators: #{operator_ids.join(", ")}"
129+
SyncTasks.new(as_rake_task: false).sync_scores(operator_id: operator_ids)
130+
puts "Refreshing ranking..."
131+
RankingOperatorDocument.refresh
132+
133+
raise ActiveRecord::Rollback unless for_real
134+
end
135+
end
136+
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)