diff --git a/user-manager-server/src/main/java/de/ozgcloud/user/common/migration/M001_SetNewAndMigrateUserSettings.java b/user-manager-server/src/main/java/de/ozgcloud/user/common/migration/M001_SetNewAndMigrateUserSettings.java index 321c642e900d7375f711924034c5d6a3e33afd57..49612f216830ef26eba1e75552499fc82aef029e 100644 --- a/user-manager-server/src/main/java/de/ozgcloud/user/common/migration/M001_SetNewAndMigrateUserSettings.java +++ b/user-manager-server/src/main/java/de/ozgcloud/user/common/migration/M001_SetNewAndMigrateUserSettings.java @@ -1,7 +1,5 @@ package de.ozgcloud.user.common.migration; -import static de.ozgcloud.user.common.DocumentUtils.*; - import java.util.Map; import org.bson.Document; @@ -9,8 +7,6 @@ import org.bson.Document; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; -import de.ozgcloud.user.User; -import de.ozgcloud.user.settings.UserSettings; import io.mongock.api.annotations.ChangeUnit; import io.mongock.api.annotations.Execution; import io.mongock.api.annotations.RollbackExecution; @@ -20,11 +16,19 @@ import lombok.RequiredArgsConstructor; @ChangeUnit(id = "2024-09-22 12:00:00 OZG-3539", order = "M001", author = "sbergandy", systemVersion = "1") public class M001_SetNewAndMigrateUserSettings { + static final String USER_COLLECTION_NAME = "User"; + static final String USER_SETTINGS_FIELD = "userSettings"; + static final String NOTIFICATIONS_SEND_FOR_FIELD = "notificationsSendFor"; + static final String VORGANG_CREATED_FIELD = "vorgangCreated"; + static final String VORGANG_ASSIGNED_TO_USER_FIELD = "vorgangAssignedToUser"; + static final String POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD = "postfachNachrichtFromAntragsteller"; + static final String WIEDERVORLAGE_OVERDUE_FIELD = "wiedervorlageOverdue"; + private final MongoDatabase mongoDatabase; @Execution public void migrationMethod() { - var userCollection = mongoDatabase.getCollection(User.COLLECTION_NAME); + var userCollection = mongoDatabase.getCollection(USER_COLLECTION_NAME); migrateNotificationsSendForALL(userCollection); migrateNotificationsSendForNONE(userCollection); migrateEmptySettings(userCollection); @@ -32,39 +36,43 @@ public class M001_SetNewAndMigrateUserSettings { private void migrateNotificationsSendForALL(MongoCollection<Document> userCollection) { userCollection.updateMany( - new Document(Map.of(buildFieldPath(User.USER_SETTINGS_FIELD, UserSettings.NOTIFICATIONS_SEND_FOR_FIELD), "ALL")), - new Document(Map.of("$set", Map.of(User.USER_SETTINGS_FIELD, - Map.of(UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "ALL", - UserSettings.VORGANG_CREATED_FIELD, true, - UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, - UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, - UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true))))); + new Document(Map.of(buildFieldPath(USER_SETTINGS_FIELD, NOTIFICATIONS_SEND_FOR_FIELD), "ALL")), + new Document(Map.of("$set", Map.of(USER_SETTINGS_FIELD, + Map.of(NOTIFICATIONS_SEND_FOR_FIELD, "ALL", + VORGANG_CREATED_FIELD, true, + VORGANG_ASSIGNED_TO_USER_FIELD, true, + POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, + WIEDERVORLAGE_OVERDUE_FIELD, true))))); } private void migrateNotificationsSendForNONE(MongoCollection<Document> userCollection) { userCollection.updateMany( - new Document(Map.of(buildFieldPath(User.USER_SETTINGS_FIELD, UserSettings.NOTIFICATIONS_SEND_FOR_FIELD), "NONE")), - new Document(Map.of("$set", Map.of(User.USER_SETTINGS_FIELD, - Map.of(UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "NONE", - UserSettings.VORGANG_CREATED_FIELD, false, - UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, - UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, - UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true))))); + new Document(Map.of(buildFieldPath(USER_SETTINGS_FIELD, NOTIFICATIONS_SEND_FOR_FIELD), "NONE")), + new Document(Map.of("$set", Map.of(USER_SETTINGS_FIELD, + Map.of(NOTIFICATIONS_SEND_FOR_FIELD, "NONE", + VORGANG_CREATED_FIELD, false, + VORGANG_ASSIGNED_TO_USER_FIELD, true, + POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, + WIEDERVORLAGE_OVERDUE_FIELD, true))))); } private void migrateEmptySettings(MongoCollection<Document> userCollection) { userCollection.updateMany( - new Document(Map.of(buildFieldPath(User.USER_SETTINGS_FIELD, UserSettings.NOTIFICATIONS_SEND_FOR_FIELD), Map.of("$exists", false))), - new Document(Map.of("$set", Map.of(User.USER_SETTINGS_FIELD, - Map.of(UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "NONE", - UserSettings.VORGANG_CREATED_FIELD, false, - UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, - UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, - UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true))))); + new Document(Map.of(buildFieldPath(USER_SETTINGS_FIELD, NOTIFICATIONS_SEND_FOR_FIELD), Map.of("$exists", false))), + new Document(Map.of("$set", Map.of(USER_SETTINGS_FIELD, + Map.of(NOTIFICATIONS_SEND_FOR_FIELD, "NONE", + VORGANG_CREATED_FIELD, false, + VORGANG_ASSIGNED_TO_USER_FIELD, true, + POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, + WIEDERVORLAGE_OVERDUE_FIELD, true))))); } @RollbackExecution public void rollback() { // kein rollback implementiert } + + private String buildFieldPath(String... fields) { + return String.join(".", fields); + } } diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/common/migration/M001_SetNewAndMigrateUserSettingsITCase.java b/user-manager-server/src/test/java/de/ozgcloud/user/common/migration/M001_SetNewAndMigrateUserSettingsITCase.java index d0b74814a531148c13e186562aa9077b03f560ec..4908297ee0722c72eda79cbabe810df09c3a823b 100644 --- a/user-manager-server/src/test/java/de/ozgcloud/user/common/migration/M001_SetNewAndMigrateUserSettingsITCase.java +++ b/user-manager-server/src/test/java/de/ozgcloud/user/common/migration/M001_SetNewAndMigrateUserSettingsITCase.java @@ -1,5 +1,6 @@ package de.ozgcloud.user.common.migration; +import static de.ozgcloud.user.common.migration.M001_SetNewAndMigrateUserSettings.*; import static org.assertj.core.api.Assertions.*; import java.util.Map; @@ -14,9 +15,7 @@ import org.junit.jupiter.api.Test; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoCollection; -import de.ozgcloud.user.User; import de.ozgcloud.user.common.MongoDbTestProfile; -import de.ozgcloud.user.settings.UserSettings; import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.junit.TestProfile; @@ -24,6 +23,8 @@ import io.quarkus.test.junit.TestProfile; @TestProfile(MongoDbTestProfile.class) class M001_SetNewAndMigrateUserSettingsITCase { + static final String USERNAME_FIELD = "username"; + @ConfigProperty(name = "quarkus.mongodb.database") String database; @@ -40,55 +41,55 @@ class M001_SetNewAndMigrateUserSettingsITCase { @BeforeEach void initDatabase() { - userCollection = mongoClient.getDatabase(database).getCollection(User.COLLECTION_NAME); + userCollection = mongoClient.getDatabase(database).getCollection(USER_COLLECTION_NAME); userCollection.drop(); userCollection.insertOne(new Document( - Map.of(User.USERNAME_FIELD, "alluser", - User.USER_SETTINGS_FIELD, Map.of(UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "ALL")))); - userCollection.insertOne(new Document(Map.of(User.USERNAME_FIELD, "noneuser", - User.USER_SETTINGS_FIELD, Map.of(UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "NONE")))); - userCollection.insertOne(new Document(Map.of(User.USERNAME_FIELD, "nosettings"))); + Map.of(USERNAME_FIELD, "alluser", + USER_SETTINGS_FIELD, Map.of(NOTIFICATIONS_SEND_FOR_FIELD, "ALL")))); + userCollection.insertOne(new Document(Map.of(USERNAME_FIELD, "noneuser", + USER_SETTINGS_FIELD, Map.of(NOTIFICATIONS_SEND_FOR_FIELD, "NONE")))); + userCollection.insertOne(new Document(Map.of(USERNAME_FIELD, "nosettings"))); } @Test void shouldMigrateNotificationSendFor_ALL() { migration.migrationMethod(); - var user = userCollection.find(new Document(Map.of(User.USERNAME_FIELD, "alluser"))); + var user = userCollection.find(new Document(Map.of(USERNAME_FIELD, "alluser"))); assertThat(user.first()).contains( - entry(User.USER_SETTINGS_FIELD, new Document(Map.of( - UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "ALL", - UserSettings.VORGANG_CREATED_FIELD, true, - UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, - UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, - UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true)))); + entry(USER_SETTINGS_FIELD, new Document(Map.of( + NOTIFICATIONS_SEND_FOR_FIELD, "ALL", + VORGANG_CREATED_FIELD, true, + VORGANG_ASSIGNED_TO_USER_FIELD, true, + POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, + WIEDERVORLAGE_OVERDUE_FIELD, true)))); } @Test void shouldMigrateNotificationSendFor_NONE() { migration.migrationMethod(); - var user = userCollection.find(new Document(Map.of(User.USERNAME_FIELD, "noneuser"))); + var user = userCollection.find(new Document(Map.of(USERNAME_FIELD, "noneuser"))); assertThat(user.first()).contains( - entry(User.USER_SETTINGS_FIELD, new Document(Map.of( - UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "NONE", - UserSettings.VORGANG_CREATED_FIELD, false, - UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, - UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, - UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true)))); + entry(USER_SETTINGS_FIELD, new Document(Map.of( + NOTIFICATIONS_SEND_FOR_FIELD, "NONE", + VORGANG_CREATED_FIELD, false, + VORGANG_ASSIGNED_TO_USER_FIELD, true, + POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, + WIEDERVORLAGE_OVERDUE_FIELD, true)))); } @Test void shouldSetDefaultSettings() { migration.migrationMethod(); - var user = userCollection.find(new Document(Map.of(User.USERNAME_FIELD, "nosettings"))); + var user = userCollection.find(new Document(Map.of(USERNAME_FIELD, "nosettings"))); assertThat(user.first()).contains( - entry(User.USER_SETTINGS_FIELD, new Document(Map.of( - UserSettings.NOTIFICATIONS_SEND_FOR_FIELD, "NONE", - UserSettings.VORGANG_CREATED_FIELD, false, - UserSettings.VORGANG_ASSIGNED_TO_USER_FIELD, true, - UserSettings.POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, - UserSettings.WIEDERVORLAGE_OVERDUE_FIELD, true)))); + entry(USER_SETTINGS_FIELD, new Document(Map.of( + NOTIFICATIONS_SEND_FOR_FIELD, "NONE", + VORGANG_CREATED_FIELD, false, + VORGANG_ASSIGNED_TO_USER_FIELD, true, + POSTFACH_NACHRICHT_FROM_ANTRAGSTELLER_FIELD, true, + WIEDERVORLAGE_OVERDUE_FIELD, true)))); } } \ No newline at end of file