diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommand.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..d08eaeb1b40e7ba49caec9ddf754643690475359 --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommand.java @@ -0,0 +1,49 @@ +package de.ozgcloud.vorgang.common.migration; + +import java.util.List; + +import org.bson.Document; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; + +import de.ozgcloud.command.Command; +import io.mongock.api.annotations.ChangeUnit; +import io.mongock.api.annotations.Execution; +import io.mongock.api.annotations.RollbackExecution; + +@ChangeUnit(id = "2025-01-17 16:00:00 OZG-7515", order = "M014", author = "freichenbach", runAlways = true) +public class M014_AddItemNameBescheidToPatchAttachedItemCommand { // NOSONAR + + private static final String ORDER_FIELD = "order"; + private static final String SEND_BESCHEID_ORDER = "SEND_BESCHEID"; + private static final String PARENT_ID_FIELD = "bodyObject.parentId"; + private static final String PATCH_ATTACHED_ITEM_ORDER = "PATCH_ATTACHED_ITEM"; + private static final String ITEM_NAME_FILED = "bodyObject.itemName"; + private static final String BESCHEID_ITEM_NAME = "Bescheid"; + + @Execution + public void doMigration(MongoTemplate template) { + var parentIds = getSendBescheidCommandIds(template); + template.aggregate(buildAggregationPipeline(parentIds), Command.COLLECTION_NAME, Document.class); + } + + List<String> getSendBescheidCommandIds(MongoTemplate template) { + var commands = template.find(Query.query(Criteria.where(ORDER_FIELD).is(SEND_BESCHEID_ORDER)), Command.class); + return commands.stream().map(Command::getId).toList(); + } + + private Aggregation buildAggregationPipeline(List<String> parentIds) { + var matchingCriteria = new Criteria().andOperator(Criteria.where(PARENT_ID_FIELD).in(parentIds), + Criteria.where(ORDER_FIELD).is(PATCH_ATTACHED_ITEM_ORDER), + Criteria.where(ITEM_NAME_FILED).exists(false)); + return Aggregation.newAggregation(Aggregation.match(matchingCriteria), + Aggregation.addFields().addFieldWithValue(ITEM_NAME_FILED, BESCHEID_ITEM_NAME).build()); + } + + @RollbackExecution + public void rollback() { + // kein rollback implementiert + } +} \ No newline at end of file