From 215deda1836ede3b7f9d0ea44b5773d2f7ae5463 Mon Sep 17 00:00:00 2001 From: wolfez Date: Fri, 25 Jul 2025 13:54:23 +0200 Subject: [PATCH 1/4] add duplicate memberships cleanup migration --- CHANGELOG.md | 1 + ...icate-memberships-ocmw-municipality.sparql | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql diff --git a/CHANGELOG.md b/CHANGELOG.md index 257a67d..529e961 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - 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/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql b/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql new file mode 100644 index 0000000..a55bf85 --- /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 ?orgB ; # OCMW + org:member ?orgA ; # Municipality + org:role ; + ?p ?o . + + # Find the other memberships with swapped organizations + ?correctMembership a org:Membership ; + org:organization ?orgA ; # Municipality + org:member ?orgB ; # OCMW + org:role . + } + + GRAPH ?gA { + ?orgA org:classification ?classA . + } + + GRAPH ?gB { + ?orgB org:classification ?classB . + } + + FILTER(?classA = ) + FILTER(?classB = ) +} From 6f2db80f50933a31d4aefe7507f6d4a0cf66a265 Mon Sep 17 00:00:00 2001 From: wolfez Date: Thu, 31 Jul 2025 11:01:07 +0200 Subject: [PATCH 2/4] use meaningful variableNames --- ...icate-memberships-ocmw-municipality.sparql | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql b/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql index a55bf85..dac16fd 100644 --- a/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql +++ b/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql @@ -8,26 +8,26 @@ DELETE { } WHERE { GRAPH { ?duplicateMembership a org:Membership ; - org:organization ?orgB ; # OCMW - org:member ?orgA ; # Municipality + org:organization ?ocmw ; + org:member ?municipality ; org:role ; ?p ?o . # Find the other memberships with swapped organizations ?correctMembership a org:Membership ; - org:organization ?orgA ; # Municipality - org:member ?orgB ; # OCMW + org:organization ?municipality ; + org:member ?ocmw ; org:role . } - GRAPH ?gA { - ?orgA org:classification ?classA . + GRAPH ?graphMunicipality { + ?municipality org:classification ?municipalityClassification . } - GRAPH ?gB { - ?orgB org:classification ?classB . + GRAPH ?graphOCMW { + ?ocmw org:classification ?ocmwClassificiation . } - FILTER(?classA = ) - FILTER(?classB = ) + FILTER(?municipalityClassification = ) + FILTER(?ocmwClassificiation = ) } From 9dffe4b2233cd4161a176ec4884614875cc4591d Mon Sep 17 00:00:00 2001 From: wolfez Date: Thu, 31 Jul 2025 11:32:24 +0200 Subject: [PATCH 3/4] Add migration to fix reversed memberships with no correct membership --- ...ersed-memberships-ocmw-municipality.sparql | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 config/migrations/2025/20250725120411-fix-reversed-memberships-ocmw-municipality.sparql 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 . + } + } +} From 2ef1d8ab7b725cdffcc415b12ca6a6c00f19f40c Mon Sep 17 00:00:00 2001 From: wolfez Date: Fri, 1 Aug 2025 10:02:49 +0200 Subject: [PATCH 4/4] use specific graphs --- ...-remove-duplicate-memberships-ocmw-municipality.sparql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql b/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql index dac16fd..209b394 100644 --- a/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql +++ b/config/migrations/2025/20250725120522-remove-duplicate-memberships-ocmw-municipality.sparql @@ -20,14 +20,14 @@ DELETE { org:role . } - GRAPH ?graphMunicipality { + GRAPH { ?municipality org:classification ?municipalityClassification . } - GRAPH ?graphOCMW { - ?ocmw org:classification ?ocmwClassificiation . + GRAPH { + ?ocmw org:classification ?ocmwClassification . } FILTER(?municipalityClassification = ) - FILTER(?ocmwClassificiation = ) + FILTER(?ocmwClassification = ) }