From 48440bbe3adab3f3ec7cc167728e04df6831e0bc Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Wed, 4 Dec 2024 19:55:44 +0100
Subject: [PATCH] OZG-6810 [wip] do refactoring

---
 .../NachrichtenManagerConfiguration.java      |  2 +
 .../file/AttachmentFileMapper.java            | 34 ++++++++++++
 .../AttachmentFileRemoteService.java}         | 14 +++--
 .../file/AttachmentFileService.java           | 54 +++++++++++++++++++
 .../NachrichtenManagerTestApplication.java    |  3 --
 .../file/AttachmentFileServiceTest.java       | 30 +++++++++++
 .../file/AttachmentFileTestFactory.java       | 46 ++++++++++++++++
 7 files changed, 172 insertions(+), 11 deletions(-)
 create mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFileMapper.java
 rename nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/{postfach/BinaryFileService.java => file/AttachmentFileRemoteService.java} (71%)
 create mode 100644 nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFileService.java
 create mode 100644 nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/file/AttachmentFileServiceTest.java
 create mode 100644 nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/file/AttachmentFileTestFactory.java

diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerConfiguration.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerConfiguration.java
index 7f8d749..d564c5b 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerConfiguration.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerConfiguration.java
@@ -24,6 +24,8 @@ public class NachrichtenManagerConfiguration {
 	public static final String NACHRICHTEN_VORGANG_REMOTE_SERVICE = "nachrichten_vorgangRemoteService";
 	public static final String NACHRICHTEN_ATTACHED_ITEM_SERVICE = "nachrichten_attachedItemService";
 	public static final String NACHRICHTEN_OZG_CLOUD_FILE_MAPPER = "nachrichten_OzgCloudFileMapperImpl";
+	public static final String BINARY_FILE_SERVICE_NAME = "nachrichten_BinaryFileService";
+	public static final String BINARY_FILE_REMOTE_SERVICE_NAME = "nachrichten_BinaryFileRemoteService";
 
 	public static final String GRPC_VORGANG_MANAGER_NAME = "vorgang-manager";
 	public static final String GRPC_COMMAND_MANAGER_NAME = "command-manager";
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFileMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFileMapper.java
new file mode 100644
index 0000000..8b39ba1
--- /dev/null
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFileMapper.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.nachrichten.file;
+
+import org.mapstruct.Mapper;
+
+import de.ozgcloud.vorgang.grpc.file.GrpcOzgFile;
+
+@Mapper
+interface AttachmentFileMapper {
+
+	AttachmentFile fromOzgFile(GrpcOzgFile ozgFile);
+}
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFileRemoteService.java
similarity index 71%
rename from nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java
rename to nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFileRemoteService.java
index 6f7465c..4595837 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFileRemoteService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+ * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
  * Ministerpräsidenten des Landes Schleswig-Holstein
  * Staatskanzlei
  * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
@@ -21,16 +21,14 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-package de.ozgcloud.nachrichten.postfach;
+package de.ozgcloud.nachrichten.file;
 
-import java.io.InputStream;
+import org.springframework.stereotype.Component;
 
-import com.mongodb.client.gridfs.model.GridFSFile;
+import de.ozgcloud.nachrichten.NachrichtenManagerConfiguration;
 
-//Temporally replacement for using GRPC Api
-public interface BinaryFileService {
+@Component(NachrichtenManagerConfiguration.BINARY_FILE_REMOTE_SERVICE_NAME)
+class AttachmentFileRemoteService {
 
-	InputStream getUploadedFileStream(FileId fileId);
 
-	GridFSFile getFile(FileId fileId);
 }
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFileService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFileService.java
new file mode 100644
index 0000000..856cdde
--- /dev/null
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFileService.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.nachrichten.file;
+
+import java.io.InputStream;
+
+import org.springframework.stereotype.Service;
+
+import de.ozgcloud.nachrichten.NachrichtenManagerConfiguration;
+import de.ozgcloud.nachrichten.postfach.FileId;
+import lombok.RequiredArgsConstructor;
+
+@Service(NachrichtenManagerConfiguration.BINARY_FILE_SERVICE_NAME)
+@RequiredArgsConstructor
+public class AttachmentFileService {
+
+	private final AttachmentFileRemoteService attachmentFileRemoteService;
+	private final AttachmentFileMapper attachmentFileMapper;
+
+	public AttachmentFile getFile(FileId fileId) {
+		// new TechnicalException("Can not find attachment with id " + fileId));
+		return attachmentFileMapper.fromOzgFile(null);
+	}
+
+	public InputStream getFileContent(FileId fileId) {
+		return InputStream.nullInputStream();
+	}
+
+	public String createAttachmentFile(AttachmentFile binaryFile, InputStream fileContent) {
+		return "";
+	}
+
+}
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/NachrichtenManagerTestApplication.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/NachrichtenManagerTestApplication.java
index 489b714..36c71b3 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/NachrichtenManagerTestApplication.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/NachrichtenManagerTestApplication.java
@@ -7,7 +7,6 @@ import org.springframework.context.annotation.ComponentScan;
 
 import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
 import de.ozgcloud.apilib.file.OzgCloudFileService;
-import de.ozgcloud.nachrichten.postfach.BinaryFileService;
 import de.ozgcloud.nachrichten.postfach.muk.MukPostfachConfiguration;
 
 @SpringBootApplication
@@ -22,7 +21,5 @@ public class NachrichtenManagerTestApplication {
 	@MockBean
 	@Qualifier(MukPostfachConfiguration.OZG_CLOUD_FILE_SERVICE_NAME)
 	private OzgCloudFileService mukOzgCloudFileServices;
-	@MockBean
-	private BinaryFileService binaryFileService;
 
 }
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/file/AttachmentFileServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/file/AttachmentFileServiceTest.java
new file mode 100644
index 0000000..1d1d53e
--- /dev/null
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/file/AttachmentFileServiceTest.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.nachrichten.file;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class AttachmentFileServiceTest {
+
+}
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/file/AttachmentFileTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/file/AttachmentFileTestFactory.java
new file mode 100644
index 0000000..fc2a3ac
--- /dev/null
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/file/AttachmentFileTestFactory.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.nachrichten.file;
+
+import com.thedeanda.lorem.LoremIpsum;
+
+import de.ozgcloud.nachrichten.common.vorgang.VorgangTestFactory;
+
+public class AttachmentFileTestFactory {
+
+	public static final String NAME = LoremIpsum.getInstance().getWords(1);
+	public static final String CONTENT_TYPE = LoremIpsum.getInstance().getWords(1);
+	public static final String VORGANG_ID = VorgangTestFactory.ID;
+
+	public static AttachmentFile create() {
+		return createBuilder().build();
+	}
+
+	public static AttachmentFile.AttachmentFileBuilder createBuilder() {
+		return AttachmentFile.builder()
+				.name(NAME)
+				.contentType(CONTENT_TYPE)
+				.vorgangId(VORGANG_ID);
+	}
+}
-- 
GitLab