From e3ec21eb71b0e8746614aa3260d33ed7233e9c9a Mon Sep 17 00:00:00 2001 From: mirdono Date: Wed, 2 Oct 2024 19:10:18 +0200 Subject: [PATCH] feat: add cleanup jobs to delete triples When removing memberships some `org:hasSubOrganization` or `org:linkedTo` triples may remain in the triplestore. These migrations add jobs to delete such triples. --- ...cleanup--province-has-sub-organization.ttl | 3 +- ...ip-cleanup--delete-worship-linked-to.graph | 1 + ...ship-cleanup--delete-worship-linked-to.ttl | 34 +++++++++++++++ ...-delete-worship-has-sub-organization.graph | 1 + ...p--delete-worship-has-sub-organization.ttl | 29 +++++++++++++ ...eanup--delete-municipality-linked-to.graph | 1 + ...cleanup--delete-municipality-linked-to.ttl | 26 +++++++++++ ...te-municipality-has-sub-organization.graph | 1 + ...lete-municipality-has-sub-organization.ttl | 43 +++++++++++++++++++ ...delete-province-has-sub-organization.graph | 1 + ...--delete-province-has-sub-organization.ttl | 41 ++++++++++++++++++ 11 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002151049-membership-cleanup--delete-worship-linked-to.graph create mode 100644 config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002151049-membership-cleanup--delete-worship-linked-to.ttl create mode 100644 config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002162120-membership-cleanup--delete-worship-has-sub-organization.graph create mode 100644 config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002162120-membership-cleanup--delete-worship-has-sub-organization.ttl create mode 100644 config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003170226-membership-cleanup--delete-municipality-linked-to.graph create mode 100644 config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003170226-membership-cleanup--delete-municipality-linked-to.ttl create mode 100644 config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003171920-membership-cleanup--delete-municipality-has-sub-organization.graph create mode 100644 config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003171920-membership-cleanup--delete-municipality-has-sub-organization.ttl create mode 100644 config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003173836-membership-cleanup--delete-province-has-sub-organization.graph create mode 100644 config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003173836-membership-cleanup--delete-province-has-sub-organization.ttl diff --git a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241001145338-membership-cleanup--province-has-sub-organization.ttl b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241001145338-membership-cleanup--province-has-sub-organization.ttl index a3bb098..4ba9228 100644 --- a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241001145338-membership-cleanup--province-has-sub-organization.ttl +++ b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241001145338-membership-cleanup--province-has-sub-organization.ttl @@ -27,9 +27,10 @@ ?member org:classification ?memberClass . FILTER ( ?memberClass IN ( - , , , + , + , , ) diff --git a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002151049-membership-cleanup--delete-worship-linked-to.graph b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002151049-membership-cleanup--delete-worship-linked-to.graph new file mode 100644 index 0000000..092c3a9 --- /dev/null +++ b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002151049-membership-cleanup--delete-worship-linked-to.graph @@ -0,0 +1 @@ +http://mu.semte.ch/graphs/public diff --git a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002151049-membership-cleanup--delete-worship-linked-to.ttl b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002151049-membership-cleanup--delete-worship-linked-to.ttl new file mode 100644 index 0000000..9dae020 --- /dev/null +++ b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002151049-membership-cleanup--delete-worship-linked-to.ttl @@ -0,0 +1,34 @@ +@prefix cleanup: . +@prefix mu: . +@prefix dcterms: . + + a cleanup:Job ; + mu:uuid "679eec55-0f69-4d45-84c1-9f73df966983" ; + dcterms:title "Delete leftover `org:linkedTo` triples for Representative Bodies and [Central] Worship Services." ; + cleanup:randomQuery """ + PREFIX org: + + DELETE { + GRAPH { + ?s org:linkedTo ?o . + } + } WHERE { + GRAPH { + ?s org:linkedTo ?o . + FILTER NOT EXISTS { + ?membership a org:Membership ; + org:organization ?o ; + org:member ?s ; + org:role . + } + + ?s org:classification . + + ?o org:classification ?oClass . + FILTER ( ?oClass IN ( + , + + )) + } + } + """ . diff --git a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002162120-membership-cleanup--delete-worship-has-sub-organization.graph b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002162120-membership-cleanup--delete-worship-has-sub-organization.graph new file mode 100644 index 0000000..092c3a9 --- /dev/null +++ b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002162120-membership-cleanup--delete-worship-has-sub-organization.graph @@ -0,0 +1 @@ +http://mu.semte.ch/graphs/public diff --git a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002162120-membership-cleanup--delete-worship-has-sub-organization.ttl b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002162120-membership-cleanup--delete-worship-has-sub-organization.ttl new file mode 100644 index 0000000..b807bc9 --- /dev/null +++ b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241002162120-membership-cleanup--delete-worship-has-sub-organization.ttl @@ -0,0 +1,29 @@ +@prefix cleanup: . +@prefix mu: . +@prefix dcterms: . + + a cleanup:Job ; + mu:uuid "50cee254-37e4-410e-936a-d974047bdd4b" ; + dcterms:title "Delete leftover `org:hasSubOrganization` triples for Central Worship Services and Worship Services." ; + cleanup:randomQuery """ + PREFIX org: + + DELETE { + GRAPH { + ?cws org:hasSubOrganization ?ws . + } + } WHERE { + GRAPH { + ?cws org:hasSubOrganization ?ws . + FILTER NOT EXISTS { + ?membership a org:Membership ; + org:organization ?cws ; + org:member ?ws ; + org:role . + } + + ?cws org:classification . + ?ws org:classification . + } + } + """ . diff --git a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003170226-membership-cleanup--delete-municipality-linked-to.graph b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003170226-membership-cleanup--delete-municipality-linked-to.graph new file mode 100644 index 0000000..092c3a9 --- /dev/null +++ b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003170226-membership-cleanup--delete-municipality-linked-to.graph @@ -0,0 +1 @@ +http://mu.semte.ch/graphs/public diff --git a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003170226-membership-cleanup--delete-municipality-linked-to.ttl b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003170226-membership-cleanup--delete-municipality-linked-to.ttl new file mode 100644 index 0000000..19b2ef8 --- /dev/null +++ b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003170226-membership-cleanup--delete-municipality-linked-to.ttl @@ -0,0 +1,26 @@ +@prefix cleanup: . +@prefix mu: . +@prefix dcterms: . + + a cleanup:Job ; + mu:uuid "14cfd05c-7047-43a1-97e4-42d3dd6b048d" ; + dcterms:title "Delete leftover `org:linkedTo` triples for Municipalities." ; + cleanup:randomQuery """ + PREFIX org: + + DELETE { + GRAPH { + ?municipality org:linkedTo ?member . + } + } WHERE { + GRAPH { + ?municipality org:linkedTo ?member . + FILTER NOT EXISTS { + ?membership a org:Membership ; + org:organization ?municipality ; + org:member ?member ; + org:role . + } + } + } + """ . diff --git a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003171920-membership-cleanup--delete-municipality-has-sub-organization.graph b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003171920-membership-cleanup--delete-municipality-has-sub-organization.graph new file mode 100644 index 0000000..092c3a9 --- /dev/null +++ b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003171920-membership-cleanup--delete-municipality-has-sub-organization.graph @@ -0,0 +1 @@ +http://mu.semte.ch/graphs/public diff --git a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003171920-membership-cleanup--delete-municipality-has-sub-organization.ttl b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003171920-membership-cleanup--delete-municipality-has-sub-organization.ttl new file mode 100644 index 0000000..9a13f21 --- /dev/null +++ b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003171920-membership-cleanup--delete-municipality-has-sub-organization.ttl @@ -0,0 +1,43 @@ +@prefix cleanup: . +@prefix mu: . +@prefix dcterms: . + + a cleanup:Job ; + mu:uuid "141a5f1c-39d5-431a-99e2-9085252654a3" ; + dcterms:title "Delete leftover `org:hasSubOrganization` triples for Municipalities." ; + cleanup:randomQuery """ + PREFIX org: + + DELETE { + GRAPH { + ?municipality org:hasSubOrganization ?member . + } + } WHERE { + GRAPH { + ?municipality org:hasSubOrganization ?member . + FILTER NOT EXISTS { + ?membership a org:Membership ; + org:organization ?municipality ; + org:member ?member ; + org:role . + } + + ?member org:classification ?memberClass . + FILTER ( ?memberClass + IN ( + , + , + , + , + , + , + , + + ) + ) + } + GRAPH { + ?municipality org:classification . + } + } + """ . diff --git a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003173836-membership-cleanup--delete-province-has-sub-organization.graph b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003173836-membership-cleanup--delete-province-has-sub-organization.graph new file mode 100644 index 0000000..092c3a9 --- /dev/null +++ b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003173836-membership-cleanup--delete-province-has-sub-organization.graph @@ -0,0 +1 @@ +http://mu.semte.ch/graphs/public diff --git a/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003173836-membership-cleanup--delete-province-has-sub-organization.ttl b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003173836-membership-cleanup--delete-province-has-sub-organization.ttl new file mode 100644 index 0000000..aa3e0ee --- /dev/null +++ b/config/migrations/2024/20240930124819-membership-cleanup-jobs/20241003173836-membership-cleanup--delete-province-has-sub-organization.ttl @@ -0,0 +1,41 @@ +@prefix cleanup: . +@prefix mu: . +@prefix dcterms: . + + a cleanup:Job ; + mu:uuid "7b2f66c8-1433-47f4-b730-62316f288631" ; + dcterms:title "Delete leftover `org:hasSubOrganization` triples for Provinces." ; + cleanup:randomQuery """ + PREFIX org: + + DELETE { + GRAPH { + ?province org:hasSubOrganization ?member . + } + } WHERE { + GRAPH { + ?province org:hasSubOrganization ?member . + FILTER NOT EXISTS { + ?membership a org:Membership ; + org:organization ?province ; + org:member ?member ; + org:role . + } + } + + ?member org:classification ?memberClass . + FILTER ( ?memberClass + IN ( + , + , + , + , + , + + ) + ) + GRAPH { + ?province org:classification . + } + } + """ .