From aee6177726d977d5d1fed00f58fd1cafb1bc4e72 Mon Sep 17 00:00:00 2001
From: Felix Reichenbach <felix.reichenbach@mgm-tp.com>
Date: Thu, 27 Mar 2025 16:32:24 +0100
Subject: [PATCH] OZG-7837 extand WarehouseRepository

---
 .../transformation/AggregationMapping.java    |  1 +
 .../warehouse/CustomWarehouseRepository.java  |  8 +++
 .../CustomWarehouseRepositoryImpl.java        | 22 +++++++
 .../warehouse/WarehouseRepository.java        |  2 +-
 .../CustomWarehouseRepositoryImplTest.java    | 58 +++++++++++++++++++
 5 files changed, 90 insertions(+), 1 deletion(-)
 create mode 100644 src/main/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepository.java
 create mode 100644 src/main/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepositoryImpl.java
 create mode 100644 src/test/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepositoryImplTest.java

diff --git a/src/main/java/de/ozgcloud/aggregation/transformation/AggregationMapping.java b/src/main/java/de/ozgcloud/aggregation/transformation/AggregationMapping.java
index d98c235..a6bceee 100644
--- a/src/main/java/de/ozgcloud/aggregation/transformation/AggregationMapping.java
+++ b/src/main/java/de/ozgcloud/aggregation/transformation/AggregationMapping.java
@@ -36,6 +36,7 @@ import lombok.ToString;
 public class AggregationMapping {
 
 	private FormIdentifier formIdentifier;
+	private String name;
 
 	@Singular
 	private List<FieldMapping> fieldMappings;
diff --git a/src/main/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepository.java b/src/main/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepository.java
new file mode 100644
index 0000000..da72066
--- /dev/null
+++ b/src/main/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepository.java
@@ -0,0 +1,8 @@
+package de.ozgcloud.aggregation.warehouse;
+
+interface CustomWarehouseRepository {
+
+	DocumentEntry saveInCollection(DocumentEntry documentEntry, String collectionName);
+
+	void deleteCollection(String collectionName);
+}
diff --git a/src/main/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepositoryImpl.java b/src/main/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepositoryImpl.java
new file mode 100644
index 0000000..6e331b6
--- /dev/null
+++ b/src/main/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepositoryImpl.java
@@ -0,0 +1,22 @@
+package de.ozgcloud.aggregation.warehouse;
+
+import org.springframework.data.mongodb.core.MongoTemplate;
+
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+class CustomWarehouseRepositoryImpl implements CustomWarehouseRepository {
+
+	private final MongoTemplate mongoTemplate;
+
+	@Override
+	public DocumentEntry saveInCollection(DocumentEntry documentEntry, String collectionName) {
+		return mongoTemplate.save(documentEntry, collectionName);
+	}
+
+	@Override
+	public void deleteCollection(String collectionName) {
+		mongoTemplate.dropCollection(collectionName);
+	}
+
+}
diff --git a/src/main/java/de/ozgcloud/aggregation/warehouse/WarehouseRepository.java b/src/main/java/de/ozgcloud/aggregation/warehouse/WarehouseRepository.java
index f8bef95..d100e47 100644
--- a/src/main/java/de/ozgcloud/aggregation/warehouse/WarehouseRepository.java
+++ b/src/main/java/de/ozgcloud/aggregation/warehouse/WarehouseRepository.java
@@ -27,6 +27,6 @@ import org.springframework.data.mongodb.repository.MongoRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface WarehouseRepository extends MongoRepository<DocumentEntry, String> {
+public interface WarehouseRepository extends CustomWarehouseRepository, MongoRepository<DocumentEntry, String> {
 
 }
diff --git a/src/test/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepositoryImplTest.java b/src/test/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepositoryImplTest.java
new file mode 100644
index 0000000..c797330
--- /dev/null
+++ b/src/test/java/de/ozgcloud/aggregation/warehouse/CustomWarehouseRepositoryImplTest.java
@@ -0,0 +1,58 @@
+package de.ozgcloud.aggregation.warehouse;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.springframework.data.mongodb.core.MongoTemplate;
+
+import com.thedeanda.lorem.LoremIpsum;
+
+class CustomWarehouseRepositoryImplTest {
+
+	@InjectMocks
+	private CustomWarehouseRepositoryImpl repository;
+
+	@Mock
+	private MongoTemplate mongoTemplate;
+
+	@Nested
+	class TestSaveInCollection {
+
+		private final DocumentEntry documentEntry = DocumentEntryTestFactory.create();
+		private final String collectionName = LoremIpsum.getInstance().getWords(1);
+
+		@Test
+		void testSaveInCollection() {
+			repository.saveInCollection(documentEntry, collectionName);
+
+			verify(mongoTemplate).save(documentEntry, collectionName);
+		}
+
+		@Test
+		void shouldReturnSavedDocumentEntry() {
+			var savedDocumentEntry = DocumentEntryTestFactory.create();
+			when(mongoTemplate.save(documentEntry, collectionName)).thenReturn(savedDocumentEntry);
+
+			var returnedDocumentEntry = repository.saveInCollection(documentEntry, collectionName);
+
+			assertThat(returnedDocumentEntry).isEqualTo(savedDocumentEntry);
+		}
+	}
+
+	@Nested
+	class TestDeleteCollection {
+
+		private final String collectionName = LoremIpsum.getInstance().getWords(1);
+
+		@Test
+		void shouldDropCollection() {
+			repository.deleteCollection(collectionName);
+
+			verify(mongoTemplate).dropCollection(collectionName);
+		}
+	}
+}
-- 
GitLab