Skip to content

Commit 665b3ca

Browse files
committed
Create AccessLimitingOrganisations from Editions
As part of the work to limit edition access to name individuals, the modelling for access limiting by organisation is changing. Now that the new `AccessLimitingOrganisation` model exists, we need to populate the db table with data from `Editions` who have `access_limiting` set to `organisations`, so that the new limiting logic has data to work with. This change introduces a data migration that creates a new `AccessLimitingOrganisation` entry for each edition lead and supporting organisation and saves it to the db.
1 parent 8d83f09 commit 665b3ca

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
editions_with_org_access_limits = Edition.unscoped.where(access_limiting: "organisations")
2+
3+
puts "Found #{editions_with_org_access_limits.count} editions with access limiting set to 'organisations'"
4+
5+
warnings = []
6+
errors = []
7+
8+
editions_with_org_access_limits.each do |edition|
9+
# CorporateInformationPages don't have leading or supporting orgs
10+
next if edition.instance_of?(CorporateInformationPage)
11+
12+
msg = "Edition #{edition.id}, lead org ids #{edition.lead_organisations.pluck(:id)}, supporting org ids: #{edition.supporting_organisations.pluck(:id)}"
13+
14+
orgs = [edition.lead_organisations, edition.supporting_organisations].flatten.compact
15+
16+
if orgs.empty?
17+
warnings << "Edition #{edition.id} has `access_limiting` set to orgs but has no lead or supporting orgs"
18+
end
19+
20+
access_limiting_orgs = []
21+
22+
orgs.each do |limiting_org|
23+
access_limiting_org = AccessLimitingOrganisation.new(edition:, organisation: limiting_org)
24+
25+
if access_limiting_org.save
26+
access_limiting_orgs << access_limiting_org
27+
else
28+
errors << "Edition #{edition.id} cannot save new `AccessLimitingOrganisation` #{limiting_org.name}`: #{access_limiting_org.errors.full_messages.to_sentence}"
29+
end
30+
31+
end
32+
33+
edition.access_limiting_organisations = access_limiting_orgs
34+
35+
if edition.save(validate: false)
36+
msg += " - access limiting orgs successfully updated to: #{edition.access_limiting_organisations.pluck(:organisation_id)}"
37+
else
38+
errors << "Edition #{edition.id} failed to update: #{edition.errors.full_messages.to_sentence}"
39+
end
40+
41+
puts msg
42+
end
43+
44+
puts "Completed with #{warnings.size} warnings and #{errors.size} errors:"
45+
warnings.each { |warning| puts "WARNING: #{warning}" }
46+
errors.each { |error| puts "ERROR: #{error}" }

0 commit comments

Comments
 (0)