diff --git a/CHANGELOG.md b/CHANGELOG.md index d86b71a..e704038 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ drc restart migrations; drc logs -ft --tail=200 migrations - Fix query for organizations report [OP-3636] - Bump report-generation-service to most recent version - Write migration to harmonize date formats of change events [OP-3559] +- datafix: cleanup of duplicate memberships [OP-3634] ### Deploy notes ``` drc pull deltanotifier; drc up -d deltanotifier diff --git a/config/migrations/2025/20250725120411-fix-reversed-memberships-ocmw-municipality.sparql b/config/migrations/2025/20250725120411-fix-reversed-memberships-ocmw-municipality.sparql new file mode 100644 index 0000000..a170150 --- /dev/null +++ b/config/migrations/2025/20250725120411-fix-reversed-memberships-ocmw-municipality.sparql @@ -0,0 +1,40 @@ +PREFIX org: +PREFIX mu: + +DELETE { + GRAPH { + ?membership org:organization ?ocmw ; + org:member ?municipality . + } +} +INSERT { + GRAPH { + ?membership org:organization ?municipality ; + org:member ?ocmw . + } +} +WHERE { + GRAPH { + ?membership a org:Membership ; + org:organization ?ocmw ; + org:member ?municipality ; + org:role . + } + + GRAPH ?graphMunicipality { + ?municipality org:classification . + } + + GRAPH ?graphOCMW { + ?ocmw org:classification . + } + + FILTER NOT EXISTS { + GRAPH { + ?correctMembership a org:Membership ; + org:organization ?municipality ; + org:member ?ocmw ; + org:role . + } + } +} diff --git a/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql b/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql new file mode 100644 index 0000000..209b394 --- /dev/null +++ b/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql @@ -0,0 +1,33 @@ +PREFIX org: +PREFIX mu: + +DELETE { + GRAPH { + ?duplicateMembership ?p ?o . + } +} WHERE { + GRAPH { + ?duplicateMembership a org:Membership ; + org:organization ?ocmw ; + org:member ?municipality ; + org:role ; + ?p ?o . + + # Find the other memberships with swapped organizations + ?correctMembership a org:Membership ; + org:organization ?municipality ; + org:member ?ocmw ; + org:role . + } + + GRAPH { + ?municipality org:classification ?municipalityClassification . + } + + GRAPH { + ?ocmw org:classification ?ocmwClassification . + } + + FILTER(?municipalityClassification = ) + FILTER(?ocmwClassification = ) +}