From 118e750e9ea48bae2705dd644a2235049bc3bdc8 Mon Sep 17 00:00:00 2001
From: Martin Vogel <martin.vogel@sinc.de>
Date: Wed, 22 Jun 2022 18:34:05 +0200
Subject: [PATCH] #414 Refactor domain model classes

---
 .../model/event/SecurityEventToken.java       |  4 --
 .../model/events/SecurityEventToken.java      |  4 ++
 ...bmission.java => SubmissionForPickup.java} |  2 +-
 ...sionRequest.java => SubmissionSubmit.java} |  2 +-
 ...issions.java => SubmissionsForPickup.java} | 11 ++--
 .../domain/validation/ValidationResult.java   | 23 +++-----
 .../fitconnect/core/SubmissionSender.java     | 55 ++++++++-----------
 7 files changed, 46 insertions(+), 55 deletions(-)
 delete mode 100644 api/src/main/java/de/fitko/fitconnect/api/domain/model/event/SecurityEventToken.java
 create mode 100644 api/src/main/java/de/fitko/fitconnect/api/domain/model/events/SecurityEventToken.java
 rename api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/{CreatedSubmission.java => SubmissionForPickup.java} (91%)
 rename api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/{SubmissionRequest.java => SubmissionSubmit.java} (95%)
 rename api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/{AvailableSubmissions.java => SubmissionsForPickup.java} (67%)

diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/event/SecurityEventToken.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/event/SecurityEventToken.java
deleted file mode 100644
index 9104fd7c5..000000000
--- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/event/SecurityEventToken.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package de.fitko.fitconnect.api.domain.model.event;
-
-public class SecurityEventToken {
-}
diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/events/SecurityEventToken.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/events/SecurityEventToken.java
new file mode 100644
index 000000000..177de5151
--- /dev/null
+++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/events/SecurityEventToken.java
@@ -0,0 +1,4 @@
+package de.fitko.fitconnect.api.domain.model.events;
+
+public class SecurityEventToken {
+}
diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/CreatedSubmission.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionForPickup.java
similarity index 91%
rename from api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/CreatedSubmission.java
rename to api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionForPickup.java
index d07b2de50..4c179568b 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/CreatedSubmission.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionForPickup.java
@@ -6,7 +6,7 @@ import lombok.Value;
 import java.util.UUID;
 
 @Value
-public class CreatedSubmission {
+public class SubmissionForPickup {
 
     @JsonProperty("destinationId")
     private final UUID destinationId;
diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionRequest.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionSubmit.java
similarity index 95%
rename from api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionRequest.java
rename to api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionSubmit.java
index 0b691c7ba..a90e0398a 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionRequest.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionSubmit.java
@@ -14,7 +14,7 @@ import java.util.UUID;
 @Setter
 @Value
 @Builder
-public class SubmissionRequest {
+public class SubmissionSubmit {
 
     @JsonProperty("destinationId")
     UUID destinationId;
diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/AvailableSubmissions.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionsForPickup.java
similarity index 67%
rename from api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/AvailableSubmissions.java
rename to api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionsForPickup.java
index 07dc7552d..54f0f14a0 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/AvailableSubmissions.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/submission/SubmissionsForPickup.java
@@ -1,13 +1,16 @@
 package de.fitko.fitconnect.api.domain.model.submission;
 
+
 import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Builder;
 import lombok.Value;
 
+import java.util.Collections;
 import java.util.List;
 
 @Value
-public class AvailableSubmissions {
-
+@Builder
+public class SubmissionsForPickup{
     @JsonProperty("count")
     int count;
 
@@ -18,5 +21,5 @@ public class AvailableSubmissions {
     int totalCount;
 
     @JsonProperty("submissions")
-    List<CreatedSubmission> submissions;
-}
+    List<SubmissionForPickup> submissions = Collections.emptyList();
+}
\ No newline at end of file
diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/validation/ValidationResult.java b/api/src/main/java/de/fitko/fitconnect/api/domain/validation/ValidationResult.java
index 0293bfbed..c9f74030f 100644
--- a/api/src/main/java/de/fitko/fitconnect/api/domain/validation/ValidationResult.java
+++ b/api/src/main/java/de/fitko/fitconnect/api/domain/validation/ValidationResult.java
@@ -1,44 +1,39 @@
 package de.fitko.fitconnect.api.domain.validation;
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Wrapper for validations including errors that occurred
  */
 public class ValidationResult {
 
     private final boolean isValid;
-    private final List<Exception> errors;
+    private Exception error;
 
     private ValidationResult(final boolean isValid) {
         this.isValid = isValid;
-        this.errors = Collections.emptyList();
     }
 
-    private ValidationResult(final boolean isValid, Exception... exceptions) {
+    private ValidationResult(final boolean isValid, Exception exception) {
         this.isValid = isValid;
-        this.errors = Arrays.asList(exceptions);
+        this.error = exception;
     }
 
     public static ValidationResult ok() {
         return new ValidationResult(true);
     }
 
-    public static ValidationResult error(Exception... exceptions) {
-        return new ValidationResult(false, exceptions);
+    public static ValidationResult error(Exception exception) {
+        return new ValidationResult(false, exception);
     }
 
     public boolean isValid() {
         return this.isValid;
     }
 
-    public boolean hasErrors() {
-        return !isValid || !errors.isEmpty();
+    public boolean hasError() {
+        return !isValid || error != null;
     }
 
-    public List<Exception> getErrors() {
-        return this.errors;
+    public Exception getError() {
+        return this.error;
     }
 }
diff --git a/core/src/main/java/de/fitko/fitconnect/core/SubmissionSender.java b/core/src/main/java/de/fitko/fitconnect/core/SubmissionSender.java
index fc12ed0f8..68e965b1f 100644
--- a/core/src/main/java/de/fitko/fitconnect/core/SubmissionSender.java
+++ b/core/src/main/java/de/fitko/fitconnect/core/SubmissionSender.java
@@ -8,10 +8,10 @@ import de.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment;
 import de.fitko.fitconnect.api.domain.model.metadata.attachment.signature.Hash__1;
 import de.fitko.fitconnect.api.domain.model.metadata.attachment.signature.Type;
 import de.fitko.fitconnect.api.domain.model.metadata.data.Data;
-import de.fitko.fitconnect.api.domain.model.submission.SubmissionRequest;
-import de.fitko.fitconnect.api.domain.model.submission.CreatedSubmission;
+import de.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup;
+import de.fitko.fitconnect.api.domain.model.submission.SubmissionSubmit;
 import de.fitko.fitconnect.api.domain.validation.ValidationResult;
-import de.fitko.fitconnect.api.exceptions.internal.AuthenticationException;
+import de.fitko.fitconnect.api.exceptions.AttachmentCreationException;
 import de.fitko.fitconnect.api.services.Sender;
 import de.fitko.fitconnect.api.services.auth.OAuthService;
 import de.fitko.fitconnect.api.services.crypto.CryptoService;
@@ -24,7 +24,6 @@ import org.slf4j.LoggerFactory;
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
-import java.util.Optional;
 import java.util.UUID;
 
 public class SubmissionSender implements Sender {
@@ -35,8 +34,7 @@ public class SubmissionSender implements Sender {
     private final CertificateValidator certificateValidator;
     private final CryptoService cryptoService;
     private final MetadataService metadataService;
-
-    private HashUtil hashUtil = new HashUtil();
+    private final HashUtil hashUtil = new HashUtil();
 
     @Inject
     public SubmissionSender(final OAuthService authService,
@@ -51,77 +49,72 @@ public class SubmissionSender implements Sender {
 
 
     @Override
-    public ValidationResult validatePublicKey(RSAKey publicKey) {
+    public ValidationResult validatePublicKey(final RSAKey publicKey) {
         return certificateValidator.validatePublicKey(publicKey);
     }
 
     @Override
-    public Optional<Data> encryptSubmissionData(RSAKey publicKey, Data data) {
+    public Data encryptSubmissionData(final RSAKey publicKey, final Data data) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<Attachment> encryptAttachment(RSAKey publicKey, Attachment attachment) {
+    public Attachment encryptAttachment(final RSAKey publicKey, final Attachment attachment) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<OAuthToken> retrieveOAuthToken(String clientId, String clientSecret, String... scope) {
-        try {
-            final OAuthToken token = authService.authenticate(clientId, clientSecret, scope);
-            logger.debug("successfully retrieved token {}", token.getAccessToken());
-            return Optional.of(token);
-        } catch (AuthenticationException e) {
-            logger.error("client could not be authenticated", e.getMessage());
-            return Optional.empty();
-        }
+    public OAuthToken retrieveOAuthToken(final String clientId, final String clientSecret, final String... scope) {
+        final OAuthToken token = authService.authenticate(clientId, clientSecret, scope);
+        logger.debug("Successfully retrieved OAuth token: {}", token.getAccessToken());
+        return token;
     }
 
     @Override
-    public Optional<Metadata> createMetadata(Data data, List<Attachment> attachments) {
+    public Metadata createMetadata(final Data data, final List<Attachment> attachments) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<Metadata> createMetadata(List<Attachment> attachments) {
+    public Metadata createMetadata(final List<Attachment> attachments) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<CreatedSubmission> createSubmission(SubmissionRequest submission) {
+    public SubmissionForPickup createSubmission(final SubmissionSubmit submission) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<CreatedSubmission> sendSubmission(UUID submissionId, Metadata encryptedMetadata) {
+    public SubmissionForPickup sendSubmission(final UUID submissionId, final Metadata encryptedMetadata) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public void uploadAttachments(UUID submissionId, List<Attachment> encryptedAttachments) {
+    public void uploadAttachments(final UUID submissionId, final List<Attachment> encryptedAttachments) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
     @Override
-    public Optional<Attachment> createAttachment(File file) {
+    public Attachment createAttachment(final File file) {
         try {
-            String hashedFileContent = hashUtil.createHashFromFile(file);
-            Hash__1 hash = new Hash__1();
+            final String hashedFileContent = hashUtil.createHashFromFile(file);
+            final Hash__1 hash = new Hash__1();
             hash.setType(Type.SHA_512);
             hash.setContent(hashedFileContent);
-            return Optional.ofNullable(Attachment.builder()
+            return Attachment.builder()
                     .attachmentId(UUID.randomUUID())
                     .filename(file.getName())
                     .hash(hash)
-                    .build());
-        } catch (IOException e) {
+                    .build();
+        } catch (final IOException e) {
             logger.error("Attachment could not be read", e);
-            return Optional.empty();
+            throw new AttachmentCreationException(e.getMessage(), e);
         }
     }
 
     @Override
-    public RSAKey getEncryptionKeyForDestination(UUID destinationId) {
+    public RSAKey getEncryptionKeyForDestination(final UUID destinationId) {
         throw new UnsupportedOperationException("not yet implemented");
     }
 
-- 
GitLab