From 2d3b5796b78c8afff6c30136ab78dd43816d6c6a Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 5 Nov 2024 10:44:20 +0100
Subject: [PATCH] OZG-6949 ozg file mapper refactoring

---
 .../attachments/FileRemoteService.java        |  3 ++-
 .../attachments/OzgFileMapper.java            | 24 +++++++++----------
 .../attachments/FileRemoteServiceTest.java    |  7 ++++++
 .../FileRemoteServiceTestConfiguration.java   |  8 ++++++-
 .../attachments/OzgFileMapperTest.java        | 13 ++++++----
 5 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java
index 33d3d6b5..387b57e6 100644
--- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java
+++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java
@@ -35,6 +35,7 @@ import lombok.extern.log4j.Log4j2;
 @RequiredArgsConstructor
 class FileRemoteService {
 	private final @NonNull FileRestClient restClient;
+	private final @NonNull OzgFileMapper ozgFileMapper;
 
 	OzgFile getFile(FileIdentificationData fileIdentificationData, String address) {
 		var grpcFileMetadata = restClient.getFileMetadata(fileIdentificationData, address);
@@ -44,7 +45,7 @@ class FileRemoteService {
 			return null;
 		}
 
-		return OzgFileMapper.fromGrpcFileMetadata(grpcFileMetadata.getFileMetadata(), fileIdentificationData.fileId());
+		return ozgFileMapper.fromGrpcFileMetadata(grpcFileMetadata.getFileMetadata(), fileIdentificationData.fileId());
 	}
 
 	CompletableFuture<String> uploadFile(OzgUploadFile uploadFile, String address) {
diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFileMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFileMapper.java
index f87c6de0..83c81397 100644
--- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFileMapper.java
+++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFileMapper.java
@@ -20,20 +20,18 @@
 
 package de.ozgcloud.antragsraum.attachments;
 
-import java.util.Objects;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
 
 import de.ozgcloud.antragsraum.proxy.AntragraumGrpcFileMetadata;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
 
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-class OzgFileMapper {
-	static OzgFile fromGrpcFileMetadata(AntragraumGrpcFileMetadata grpcFile, String fileId) {
-		return OzgFile.builder()
-		  .id(fileId)
-		  .fileName(grpcFile.getName())
-		  .contentType(grpcFile.getContentType())
-		  .fileSize(Objects.nonNull(grpcFile.getSize()) ? Long.parseLong(grpcFile.getSize()) : -1L)
-		  .build();
-	}
+@Mapper
+interface OzgFileMapper {
+
+	@Mapping(target = "id", source = "fileId")
+	@Mapping(target = "fileName", source = "grpcFile.name")
+	@Mapping(target = "contentType", source = "grpcFile.contentType")
+	@Mapping(target = "fileSize", expression = "java(grpcFile.getSize() != null ? Long.parseLong(grpcFile.getSize()) : -1L)")
+	OzgFile fromGrpcFileMetadata(AntragraumGrpcFileMetadata grpcFile, String fileId);
+
 }
diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java
index 168acec8..a519703c 100644
--- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java
+++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java
@@ -40,6 +40,8 @@ import org.mockito.Mock;
 import org.mockito.Spy;
 import org.mockito.junit.jupiter.MockitoExtension;
 
+import de.ozgcloud.antragsraum.proxy.AntragraumGrpcFileMetadata;
+
 @ExtendWith(MockitoExtension.class)
 class FileRemoteServiceTest {
 	private static final FileIdentificationData FILE_IDENTIFICATION_DATA = FileIdentificationDataTestFactory.create();
@@ -51,12 +53,17 @@ class FileRemoteServiceTest {
 	@Mock
 	private FileRestClient restClient;
 
+	@Mock
+	private OzgFileMapper ozgFileMapper;
+
 	@Nested
 	class TestLoadingFile {
 		@BeforeEach
 		void init() {
 			lenient().when(restClient.getFileMetadata(any(FileIdentificationData.class), anyString())).thenReturn(
 			  AntragraumGrpcGetAttachmentMetadataResponseTestFactory.create());
+			lenient().when(ozgFileMapper.fromGrpcFileMetadata(any(AntragraumGrpcFileMetadata.class), anyString()))
+			  .thenReturn(OzgFileTestFactory.create());
 		}
 
 		@Test
diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTestConfiguration.java
index 532bc9f6..abbf9450 100644
--- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTestConfiguration.java
+++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTestConfiguration.java
@@ -22,6 +22,7 @@
 
 package de.ozgcloud.antragsraum.attachments;
 
+import org.mapstruct.factory.Mappers;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.boot.web.client.RestTemplateBuilder;
 import org.springframework.context.annotation.Bean;
@@ -42,9 +43,14 @@ public class FileRemoteServiceTestConfiguration {
 		return new StubFileRestClient();
 	}
 
+	@Bean
+	OzgFileMapper ozgFileMapper() {
+		return Mappers.getMapper(OzgFileMapper.class);
+	}
+
 	@Bean
 	FileRemoteService fileRemoteService() {
-		return new FileRemoteService(fileRestClient());
+		return new FileRemoteService(fileRestClient(), ozgFileMapper());
 	}
 
 	@Bean
diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileMapperTest.java
index 4936c15a..0bf371ff 100644
--- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileMapperTest.java
+++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileMapperTest.java
@@ -27,40 +27,45 @@ import static org.assertj.core.api.Assertions.*;
 
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
 
 import de.ozgcloud.antragsraum.proxy.AntragraumGrpcFileMetadata;
 
 class OzgFileMapperTest {
+
+	private final OzgFileMapper mapper = Mappers.getMapper(OzgFileMapper.class);
+
 	@Nested
 	class TestMappingGrpcOzgFile {
 		private final AntragraumGrpcFileMetadata grpcOzgFile = AntragraumGrpcFileMetadataTestFactory.create();
 
 		@Test
 		void shouldHaveFileName() {
-			var file = OzgFileMapper.fromGrpcFileMetadata(grpcOzgFile, FILE_ID);
+			var file = mapper.fromGrpcFileMetadata(grpcOzgFile, FILE_ID);
 
 			assertThat(file.fileName()).isEqualTo(FILE_NAME);
 		}
 
 		@Test
 		void shouldHaveFileSize() {
-			var file = OzgFileMapper.fromGrpcFileMetadata(grpcOzgFile, FILE_ID);
+			var file = mapper.fromGrpcFileMetadata(grpcOzgFile, FILE_ID);
 
 			assertThat(file.fileSize()).isEqualTo(FILE_SIZE);
 		}
 
 		@Test
 		void shouldHaveContentType() {
-			var file = OzgFileMapper.fromGrpcFileMetadata(grpcOzgFile, FILE_ID);
+			var file = mapper.fromGrpcFileMetadata(grpcOzgFile, FILE_ID);
 
 			assertThat(file.contentType()).isEqualTo(CONTENT_TYPE);
 		}
 
 		@Test
 		void shouldHaveFileId() {
-			var file = OzgFileMapper.fromGrpcFileMetadata(grpcOzgFile, FILE_ID);
+			var file = mapper.fromGrpcFileMetadata(grpcOzgFile, FILE_ID);
 
 			assertThat(file.id()).isEqualTo(FILE_ID);
 		}
 	}
+
 }
\ No newline at end of file
-- 
GitLab