This is an automated email from the ASF dual-hosted git repository.

jsinovassinnaik pushed a commit to branch UNOMI-817
in repository https://gitbox.apache.org/repos/asf/unomi.git

commit c2e379ff3bc5194210aa2ee9fd363d594d883d42
Author: jsinovassin <jsinovassinn...@jahia.com>
AuthorDate: Fri Apr 19 17:13:58 2024 +0200

    UNOMI-817: set pastEvents as flattened and clean existing mapping
---
 .../resources/META-INF/cxs/mappings/profile.json   |  7 ++++
 .../services/impl/profiles/ProfileServiceImpl.java |  9 ++++-
 ...te-2.5.0-00-cleanPastEventProfileSession.groovy | 47 ++++++++++++++++++++++
 .../2.5.0/remove_pastEvents_session.painless       | 23 +++++++++++
 4 files changed, 84 insertions(+), 2 deletions(-)

diff --git 
a/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/profile.json
 
b/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/profile.json
index 81cc14d0f..48eab69f5 100644
--- 
a/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/profile.json
+++ 
b/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/profile.json
@@ -40,6 +40,13 @@
         }
       }
     },
+    "systemProperties": {
+      "properties": {
+        "pastEvents": {
+          "type": "flattened"
+        }
+      }
+    },
     "consents": {
       "properties": {
         "statusDate": {
diff --git 
a/services/src/main/java/org/apache/unomi/services/impl/profiles/ProfileServiceImpl.java
 
b/services/src/main/java/org/apache/unomi/services/impl/profiles/ProfileServiceImpl.java
index 56bf686d8..dd30ba863 100644
--- 
a/services/src/main/java/org/apache/unomi/services/impl/profiles/ProfileServiceImpl.java
+++ 
b/services/src/main/java/org/apache/unomi/services/impl/profiles/ProfileServiceImpl.java
@@ -881,8 +881,13 @@ public class ProfileServiceImpl implements ProfileService, 
SynchronousBundleList
         if (session.getItemId() == null) {
             return null;
         }
-        if (session.getProfile() != null && 
session.getProfile().getProperties() != null) {
-            
session.getProfile().setProperties(removePersonalIdentifiersFromSessionProfile(session.getProfile().getProperties()));
+        if (session.getProfile() != null) {
+            if (session.getProfile().getProperties() != null){
+                
session.getProfile().setProperties(removePersonalIdentifiersFromSessionProfile(session.getProfile().getProperties()));
+            }
+            if (session.getProfile().getSystemProperties() != null){
+                
session.getProfile().getSystemProperties().entrySet().removeIf(entry -> 
entry.getKey().equals("pastEvents"));
+            }
         }
         return persistenceService.save(session) ? session : null;
     }
diff --git 
a/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.5.0-00-cleanPastEventProfileSession.groovy
 
b/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.5.0-00-cleanPastEventProfileSession.groovy
new file mode 100644
index 000000000..bcd43fde1
--- /dev/null
+++ 
b/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.5.0-00-cleanPastEventProfileSession.groovy
@@ -0,0 +1,47 @@
+import org.apache.unomi.shell.migration.service.MigrationContext
+import org.apache.unomi.shell.migration.utils.HttpUtils
+import org.apache.unomi.shell.migration.utils.MigrationUtils
+import org.osgi.framework.BundleContext
+import org.osgi.framework.Bundle
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+MigrationContext context = migrationContext
+String esAddress = context.getConfigString("esAddress")
+String indexPrefix = context.getConfigString("indexPrefix")
+String rolloverPolicyName = indexPrefix + "-unomi-rollover-policy"
+String rolloverEventAlias = indexPrefix + "-session"
+
+context.performMigrationStep("2.5.0-clean-profile-mapping", () -> {
+    String baseSettings = MigrationUtils.resourceAsString(bundleContext, 
"requestBody/2.0.0/base_index_mapping.json")
+    String mapping = MigrationUtils.extractMappingFromBundles(bundleContext, 
"profile.json")
+    String newIndexSettings = 
MigrationUtils.buildIndexCreationRequest(baseSettings, mapping, context, false)
+    MigrationUtils.reIndex(context.getHttpClient(), bundleContext, esAddress, 
indexPrefix + "-profile", newIndexSettings, "", context)
+})
+
+context.performMigrationStep("2.5.0-clean-session-mapping", () -> {
+    String baseSettings = MigrationUtils.resourceAsString(bundleContext, 
"requestBody/2.2.0/base_index_withRollover_request.json")
+    String cleanPastEventScript = 
MigrationUtils.getFileWithoutComments(bundleContext, 
"requestBody/2.5.0/remove_pastEvents_session.painless")
+    String mapping = MigrationUtils.extractMappingFromBundles(bundleContext, 
"session.json")
+    String newIndexSettings = 
MigrationUtils.buildIndexCreationRequestWithRollover(baseSettings, mapping, 
context, rolloverPolicyName, rolloverEventAlias)
+    Set<String> sessionIndices = 
MigrationUtils.getIndexesPrefixedBy(context.getHttpClient(), esAddress, 
"${indexPrefix}-session-")
+
+    sessionIndices.each { sessionIndex ->
+        MigrationUtils.reIndex(context.getHttpClient(), bundleContext, 
esAddress, sessionIndex, newIndexSettings, cleanPastEventScript, context)
+    }
+})
diff --git 
a/tools/shell-commands/src/main/resources/requestBody/2.5.0/remove_pastEvents_session.painless
 
b/tools/shell-commands/src/main/resources/requestBody/2.5.0/remove_pastEvents_session.painless
new file mode 100644
index 000000000..17f4443ca
--- /dev/null
+++ 
b/tools/shell-commands/src/main/resources/requestBody/2.5.0/remove_pastEvents_session.painless
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+if (ctx._source.profile != null) {
+    /* Look for empty scope */
+    if (ctx._source.profile.systemProperties != null && 
ctx._source.profile.systemProperties.pastEvents != null) {
+         ctx._source.profile.systemProperties.remove('pastEvents');
+    }
+}

Reply via email to