From b2dc6083a6d77bc4894c67246ed827611acf2a25 Mon Sep 17 00:00:00 2001
From: Martin Vogel <martin.vogel@sinc.de>
Date: Tue, 13 Feb 2024 11:28:20 +0100
Subject: [PATCH] refactor: fix merge issues (planning#1243)

---
 api/pom.xml                                   |  8 ++++
 .../api/domain/sender/ReceivedReply.java      | 37 +++++++------------
 .../api/domain/sender/SendableReply.java      |  5 +++
 .../api/domain/sender/SendableSubmission.java |  2 +-
 .../unencrypted/OptionalPropertiesStep.java   | 10 +++++
 .../domain/subscriber/ReceivedReplyData.java  | 18 +++++++++
 .../domain/subscriber/ReceivedSubmission.java | 17 ++-------
 ...dData.java => ReceivedSubmissionData.java} |  8 ++--
 .../client/sender/ReplyReceiver.java          |  9 ++---
 .../client/sender/SubmissionSender.java       |  3 ++
 .../unencrypted/OptionalPropertiesStep.java   |  0
 .../strategies/SendNewSubmissionStrategy.java |  0
 .../client/subscriber/ReplySender.java        |  1 +
 .../client/subscriber/SubmissionReceiver.java | 16 +++-----
 .../DefaultValidationServiceTest.java         |  2 +-
 15 files changed, 79 insertions(+), 57 deletions(-)
 create mode 100644 api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedReplyData.java
 rename api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/{ReceivedData.java => ReceivedSubmissionData.java} (66%)
 delete mode 100644 client/src/main/java/dev/fitko/fitconnect/client/sender/steps/unencrypted/OptionalPropertiesStep.java
 delete mode 100644 client/src/main/java/dev/fitko/fitconnect/client/sender/strategies/SendNewSubmissionStrategy.java

diff --git a/api/pom.xml b/api/pom.xml
index aefd16a13..abd1e29fa 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -29,6 +29,14 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/ReceivedReply.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/ReceivedReply.java
index 496d7e836..afa115711 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/ReceivedReply.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/ReceivedReply.java
@@ -2,12 +2,10 @@ package dev.fitko.fitconnect.api.domain.sender;
 
 import dev.fitko.fitconnect.api.FitConnectService;
 import dev.fitko.fitconnect.api.domain.model.attachment.Attachment;
-import dev.fitko.fitconnect.api.domain.model.event.authtags.AuthenticationTags;
 import dev.fitko.fitconnect.api.domain.model.event.problems.Problem;
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import dev.fitko.fitconnect.api.domain.model.reply.AcceptReply;
-import dev.fitko.fitconnect.api.domain.model.reply.Reply;
-import dev.fitko.fitconnect.api.domain.subscriber.ReceivedData;
+import dev.fitko.fitconnect.api.domain.subscriber.ReceivedReplyData;
 
 import java.net.URI;
 import java.util.Arrays;
@@ -17,28 +15,19 @@ import java.util.UUID;
 public class ReceivedReply {
 
     private final transient FitConnectService fitConnectService;
-    private final Reply reply;
-    private final ReceivedData receivedData;
-    private final Metadata metadata;
-    private final List<Attachment> attachments;
-    private final AuthenticationTags authenticationTags;
+    private final ReceivedReplyData receivedReplyData;
 
-
-    public ReceivedReply(final FitConnectService fitConnectService, final Reply reply, final ReceivedData receivedData, final Metadata metadata, final List<Attachment> attachments, final AuthenticationTags authenticationTags) {
+    public ReceivedReply(final FitConnectService fitConnectService, ReceivedReplyData receivedReplyData) {
         this.fitConnectService = fitConnectService;
-        this.reply = reply;
-        this.receivedData = receivedData;
-        this.metadata = metadata;
-        this.attachments = attachments;
-        this.authenticationTags = authenticationTags;
+        this.receivedReplyData = receivedReplyData;
     }
 
     public void acceptReply(final Problem... problems) {
-        fitConnectService.acceptReply(reply.getReplyId(), new AcceptReply(Arrays.asList(problems), authenticationTags));
+        fitConnectService.acceptReply(receivedReplyData.getReply().getReplyId(), new AcceptReply(Arrays.asList(problems), receivedReplyData.getAuthenticationTags()));
     }
 
     public void rejectReply(final List<Problem> problems) {
-        fitConnectService.rejectReply(reply.getReplyId(), problems);
+        fitConnectService.rejectReply(receivedReplyData.getReply().getReplyId(), problems);
     }
 
     /**
@@ -47,7 +36,7 @@ public class ReceivedReply {
      * @return data as string
      */
     public String getDataAsString() {
-        return receivedData.getData();
+        return receivedReplyData.getData();
     }
 
     /**
@@ -56,7 +45,7 @@ public class ReceivedReply {
      * @return mimetype string
      */
     public String getDataMimeType() {
-        return receivedData.getMimeType().value();
+        return receivedReplyData.getMetadata().getContentStructure().getData().getSubmissionSchema().getMimeType().value();
     }
 
     /**
@@ -65,7 +54,7 @@ public class ReceivedReply {
      * @return data schema as URI
      */
     public URI getDataSchemaUri() {
-        return metadata.getContentStructure().getData().getSubmissionSchema().getSchemaUri();
+        return receivedReplyData.getMetadata().getContentStructure().getData().getSubmissionSchema().getSchemaUri();
     }
 
     /**
@@ -74,7 +63,7 @@ public class ReceivedReply {
      * @return list of {@link Attachment}
      */
     public List<Attachment> getAttachments() {
-        return attachments;
+        return receivedReplyData.getAttachments();
     }
 
     /**
@@ -83,7 +72,7 @@ public class ReceivedReply {
      * @return metadata
      */
     public Metadata getMetadata() {
-        return metadata;
+        return receivedReplyData.getMetadata();
     }
 
     /**
@@ -92,7 +81,7 @@ public class ReceivedReply {
      * @return caseId as UUID
      */
     public UUID getCaseId() {
-        return reply.getCaseId();
+        return receivedReplyData.getReply().getCaseId();
     }
 
     /**
@@ -101,6 +90,6 @@ public class ReceivedReply {
      * @return replyId as UUID
      */
     public UUID getReplyId() {
-        return reply.getReplyId();
+        return receivedReplyData.getReply().getReplyId();
     }
 }
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/SendableReply.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/SendableReply.java
index df23f86e7..a85899e3c 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/SendableReply.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/SendableReply.java
@@ -2,6 +2,7 @@ package dev.fitko.fitconnect.api.domain.sender;
 
 import dev.fitko.fitconnect.api.domain.model.attachment.Attachment;
 import dev.fitko.fitconnect.api.domain.model.callback.Callback;
+import dev.fitko.fitconnect.api.domain.model.metadata.AdditionalReferenceInfo;
 import dev.fitko.fitconnect.api.domain.model.metadata.AuthenticationInformation;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.MimeType;
 import dev.fitko.fitconnect.api.domain.model.metadata.data.SubmissionSchema;
@@ -31,6 +32,7 @@ public final class SendableReply {
     private final String serviceName;
     private final String serviceIdentifier;
     private final List<AuthenticationInformation> authenticationInformation;
+    private final AdditionalReferenceInfo additionalReferenceInfo;
     private final PaymentInformation paymentInformation;
     private final ReplyChannel replyChannel;
     private final Callback callback;
@@ -45,6 +47,7 @@ public final class SendableReply {
         serviceName = builder.getServiceName();
         serviceIdentifier = builder.getServiceIdentifier();
         authenticationInformation = builder.getAuthenticationInformation();
+        additionalReferenceInfo = builder.getAdditionalReferenceInfo();
         replyChannel = builder.getReplyChannel();
         paymentInformation = builder.getPaymentInformation();
         callback = builder.getCallback();
@@ -68,6 +71,7 @@ public final class SendableReply {
         private final List<AuthenticationInformation> authenticationInformation;
         private final PaymentInformation paymentInformation;
         private final ReplyChannel replyChannel;
+        private final AdditionalReferenceInfo additionalReferenceInfo;
         private URI schemaUri;
         private final Callback callback;
 
@@ -81,6 +85,7 @@ public final class SendableReply {
             replyChannel = receivedSubmission.getMetadata().getReplyChannel();
             authenticationInformation = receivedSubmission.getMetadata().getAuthenticationInformation();
             paymentInformation = receivedSubmission.getMetadata().getPaymentInformation();
+            additionalReferenceInfo = receivedSubmission.getMetadata().getAdditionalReferenceInfo();
         }
 
         public OptionalReplyPropertiesStep setJsonData(final String replyData, final URI replyDataSchemaUri) {
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/SendableSubmission.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/SendableSubmission.java
index 39ee2c2a9..c3578379b 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/SendableSubmission.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/SendableSubmission.java
@@ -36,10 +36,10 @@ public final class SendableSubmission {
     private final String serviceName;
     private final String serviceIdentifier;
     private final List<AuthenticationInformation> authenticationInformation;
+    private final AdditionalReferenceInfo additionalReferenceInfo;
     private final PaymentInformation paymentInformation;
     private final ReplyChannel replyChannel;
     private final Callback callback;
-    private final AdditionalReferenceInfo additionalReferenceInfo;
 
     private SendableSubmission(final Builder builder) {
         destinationId = builder.getDestinationId();
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/steps/unencrypted/OptionalPropertiesStep.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/steps/unencrypted/OptionalPropertiesStep.java
index ef4cd2b18..330db5c04 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/steps/unencrypted/OptionalPropertiesStep.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/sender/steps/unencrypted/OptionalPropertiesStep.java
@@ -8,6 +8,7 @@ import dev.fitko.fitconnect.api.domain.model.attachment.Attachment;
 import dev.fitko.fitconnect.api.domain.sender.SendableSubmission;
 
 import java.net.URI;
+import java.time.LocalDate;
 import java.util.List;
 import java.util.UUID;
 
@@ -64,6 +65,15 @@ public interface OptionalPropertiesStep {
      */
     OptionalPropertiesStep setPaymentInformation(PaymentInformation paymentInformation);
 
+    /**
+     * Sets the application date when the submission was handed in.
+     * This date can differ from the technical date the submission was sent via FIT-Connect.
+     *
+     * @return next step to set more additional properties
+     */
+    OptionalPropertiesStep setApplicationDate(LocalDate applicationDate);
+
+
     /**
      * Set {@link Callback} to be informed about submission status updates asynchronous without polling.
      *
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedReplyData.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedReplyData.java
new file mode 100644
index 000000000..63d5bdcab
--- /dev/null
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedReplyData.java
@@ -0,0 +1,18 @@
+package dev.fitko.fitconnect.api.domain.subscriber;
+
+import dev.fitko.fitconnect.api.domain.model.attachment.Attachment;
+import dev.fitko.fitconnect.api.domain.model.event.authtags.AuthenticationTags;
+import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
+import dev.fitko.fitconnect.api.domain.model.reply.Reply;
+import lombok.Value;
+
+import java.util.List;
+
+@Value
+public class ReceivedReplyData {
+    String data;
+    Metadata metadata;
+    Reply reply;
+    List<Attachment> attachments;
+    AuthenticationTags authenticationTags;
+}
\ No newline at end of file
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedSubmission.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedSubmission.java
index c576b6a28..08b723224 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedSubmission.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedSubmission.java
@@ -5,40 +5,31 @@ import dev.fitko.fitconnect.api.domain.model.attachment.Attachment;
 import dev.fitko.fitconnect.api.domain.model.callback.Callback;
 import dev.fitko.fitconnect.api.domain.model.event.Event;
 import dev.fitko.fitconnect.api.domain.model.event.EventPayload;
-import dev.fitko.fitconnect.api.domain.model.event.SubmissionStatus;
 import dev.fitko.fitconnect.api.domain.model.event.problems.Problem;
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import dev.fitko.fitconnect.api.domain.model.submission.ServiceType;
 import dev.fitko.fitconnect.api.exceptions.client.FitConnectSubscriberException;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.net.URI;
 import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeParseException;
 import java.util.Date;
 import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 
-import static dev.fitko.fitconnect.api.domain.model.event.EventPayload.forRejectEvent;
-import static dev.fitko.fitconnect.api.domain.model.event.EventPayload.forAcceptEvent;
-import static dev.fitko.fitconnect.api.domain.model.event.EventPayload.forAcceptEventWithAttachments;
 import static dev.fitko.fitconnect.api.domain.model.event.EventPayload.forRejectEvent;
 
-@Builder
-@AllArgsConstructor
 public class ReceivedSubmission implements Comparable<ReceivedSubmission> {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ReceivedSubmission.class);
 
     private final transient FitConnectService subscriber;
-    private final ReceivedData receivedData;
+    private final ReceivedSubmissionData receivedData;
 
-    public ReceivedSubmission(final Subscriber subscriber, ReceivedData receivedData) {
+    public ReceivedSubmission(final FitConnectService subscriber, ReceivedSubmissionData receivedData) {
         this.subscriber = subscriber;
         this.receivedData = receivedData;
     }
@@ -189,7 +180,7 @@ public class ReceivedSubmission implements Comparable<ReceivedSubmission> {
      * @return callback
      */
     public Callback getCallback() {
-        return submission.getCallback();
+        return receivedData.getSubmission().getCallback();
     }
 
     /**
@@ -198,7 +189,7 @@ public class ReceivedSubmission implements Comparable<ReceivedSubmission> {
      * @return timestamp as {@link Date}
      */
     public Date getSubmittedAt() {
-        return submitState.getIssuedAt();
+        return receivedData.getSubmissionStatus().getIssuedAt();
     }
 
     private EventPayload getEventPayload(final Problem[] problems) {
diff --git a/api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedData.java b/api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedSubmissionData.java
similarity index 66%
rename from api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedData.java
rename to api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedSubmissionData.java
index a5d202fea..377c2560a 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedData.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/domain/subscriber/ReceivedSubmissionData.java
@@ -1,8 +1,9 @@
 package dev.fitko.fitconnect.api.domain.subscriber;
 
+import dev.fitko.fitconnect.api.domain.model.attachment.Attachment;
+import dev.fitko.fitconnect.api.domain.model.event.SubmissionStatus;
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import dev.fitko.fitconnect.api.domain.model.submission.Submission;
-import dev.fitko.fitconnect.client.sender.model.Attachment;
 import lombok.Value;
 
 import java.util.List;
@@ -10,10 +11,11 @@ import java.util.Map;
 import java.util.UUID;
 
 @Value
-public class ReceivedData {
+public class ReceivedSubmissionData {
     String data;
     Metadata metadata;
     Submission submission;
+    SubmissionStatus submissionStatus;
     List<Attachment> attachments;
     Map<UUID, String> encryptedAttachments;
-}
+}
\ No newline at end of file
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/sender/ReplyReceiver.java b/client/src/main/java/dev/fitko/fitconnect/client/sender/ReplyReceiver.java
index e9db9cef4..1948fd24a 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/sender/ReplyReceiver.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/sender/ReplyReceiver.java
@@ -18,10 +18,9 @@ import dev.fitko.fitconnect.api.domain.model.event.problems.submission.NotExactl
 import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import dev.fitko.fitconnect.api.domain.model.metadata.attachment.ApiAttachment;
 import dev.fitko.fitconnect.api.domain.model.metadata.attachment.AttachmentForValidation;
-import dev.fitko.fitconnect.api.domain.model.metadata.data.MimeType;
 import dev.fitko.fitconnect.api.domain.model.reply.Reply;
 import dev.fitko.fitconnect.api.domain.sender.ReceivedReply;
-import dev.fitko.fitconnect.api.domain.subscriber.ReceivedData;
+import dev.fitko.fitconnect.api.domain.subscriber.ReceivedReplyData;
 import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
 import dev.fitko.fitconnect.api.exceptions.client.FitConnectReplyException;
 import dev.fitko.fitconnect.api.exceptions.internal.AuthenticationTagsEmptyException;
@@ -142,10 +141,10 @@ public class ReplyReceiver {
     }
 
     private ReceivedReply buildReceivedReply(final Reply reply, final Metadata metadata, final byte[] decryptedData, final List<AttachmentForValidation> attachments, final AuthenticationTags authenticationTags) {
-        final MimeType mimeType = metadata.getContentStructure().getData().getSubmissionSchema().getMimeType();
-        final ReceivedData receivedData = new ReceivedData(new String(decryptedData, StandardCharsets.UTF_8), mimeType);
+        final String data = new String(decryptedData, StandardCharsets.UTF_8);
         final List<Attachment> receivedAttachments = attachments.stream().map(this::toApiAttachment).collect(Collectors.toList());
-        return new ReceivedReply(fitConnectService, reply, receivedData, metadata, receivedAttachments, authenticationTags);
+        final ReceivedReplyData receivedData = new ReceivedReplyData(data, metadata, reply, receivedAttachments, authenticationTags );
+        return new ReceivedReply(fitConnectService, receivedData);
     }
 
     private Attachment toApiAttachment(final AttachmentForValidation attachment) {
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/sender/SubmissionSender.java b/client/src/main/java/dev/fitko/fitconnect/client/sender/SubmissionSender.java
index 37c81d821..a417f440f 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/sender/SubmissionSender.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/sender/SubmissionSender.java
@@ -177,6 +177,9 @@ public class SubmissionSender {
         if (sendableSubmission.getPaymentInformation() != null) {
             metadata.setPaymentInformation(sendableSubmission.getPaymentInformation());
         }
+        if (sendableSubmission.getAdditionalReferenceInfo() != null) {
+            metadata.setAdditionalReferenceInfo(sendableSubmission.getAdditionalReferenceInfo());
+        }
     }
 
     private List<AttachmentPayload> encryptAndHashAttachments(final RSAKey encryptionKey, final List<Attachment> attachments) {
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/sender/steps/unencrypted/OptionalPropertiesStep.java b/client/src/main/java/dev/fitko/fitconnect/client/sender/steps/unencrypted/OptionalPropertiesStep.java
deleted file mode 100644
index e69de29bb..000000000
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/sender/strategies/SendNewSubmissionStrategy.java b/client/src/main/java/dev/fitko/fitconnect/client/sender/strategies/SendNewSubmissionStrategy.java
deleted file mode 100644
index e69de29bb..000000000
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/subscriber/ReplySender.java b/client/src/main/java/dev/fitko/fitconnect/client/subscriber/ReplySender.java
index 2ece4b853..daf75b17c 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/subscriber/ReplySender.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/subscriber/ReplySender.java
@@ -103,6 +103,7 @@ public class ReplySender {
         metadata.setReplyChannel(sendableReply.getReplyChannel());
         metadata.setPaymentInformation(sendableReply.getPaymentInformation());
         metadata.setAuthenticationInformation(sendableReply.getAuthenticationInformation());
+        metadata.setAdditionalReferenceInfo(sendableReply.getAdditionalReferenceInfo());
 
         return metadata;
     }
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/subscriber/SubmissionReceiver.java b/client/src/main/java/dev/fitko/fitconnect/client/subscriber/SubmissionReceiver.java
index b391a8fac..6c5d267c4 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/subscriber/SubmissionReceiver.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/subscriber/SubmissionReceiver.java
@@ -7,6 +7,7 @@ import dev.fitko.fitconnect.api.FitConnectService;
 import dev.fitko.fitconnect.api.config.ApplicationConfig;
 import dev.fitko.fitconnect.api.domain.model.attachment.Attachment;
 import dev.fitko.fitconnect.api.domain.model.event.EventPayload;
+import dev.fitko.fitconnect.api.domain.model.event.SubmissionStatus;
 import dev.fitko.fitconnect.api.domain.model.event.authtags.AuthenticationTags;
 import dev.fitko.fitconnect.api.domain.model.event.problems.Problem;
 import dev.fitko.fitconnect.api.domain.model.event.problems.attachment.AttachmentEncryptionIssue;
@@ -21,7 +22,7 @@ import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
 import dev.fitko.fitconnect.api.domain.model.metadata.attachment.ApiAttachment;
 import dev.fitko.fitconnect.api.domain.model.metadata.attachment.AttachmentForValidation;
 import dev.fitko.fitconnect.api.domain.model.submission.Submission;
-import dev.fitko.fitconnect.api.domain.subscriber.ReceivedData;
+import dev.fitko.fitconnect.api.domain.subscriber.ReceivedSubmissionData;
 import dev.fitko.fitconnect.api.domain.subscriber.ReceivedSubmission;
 import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
 import dev.fitko.fitconnect.api.exceptions.internal.AuthenticationTagsEmptyException;
@@ -142,15 +143,10 @@ public class SubmissionReceiver {
     private ReceivedSubmission buildReceivedSubmission(final Submission submission, final Metadata metadata, final byte[] decryptedData, final List<AttachmentForValidation> attachments) {
         final List<Attachment> receivedAttachments = attachments.stream().map(this::toApiAttachment).collect(Collectors.toList());
         final Map<UUID, String> encryptedAttachments = attachments.stream().collect(Collectors.toMap(AttachmentForValidation::getAttachmentId, AttachmentForValidation::getEncryptedData));
-        return ReceivedSubmission.builder()
-                .subscriber(subscriber)
-                .submission(submission)
-                .metadata(metadata)
-                .receivedData(receivedData)
-                .attachments(receivedAttachments)
-                .encryptedAttachments(encryptedAttachments)
-                .submitState(subscriber.getSubmitState(submission))
-                .build();
+        final String data = new String(decryptedData, StandardCharsets.UTF_8);
+        final SubmissionStatus submitState = subscriber.getSubmitState(submission);
+        return new ReceivedSubmission(subscriber, new ReceivedSubmissionData(data, metadata, submission, submitState, receivedAttachments, encryptedAttachments));
+
     }
 
     private Attachment toApiAttachment(final AttachmentForValidation attachment) {
diff --git a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
index c10f46f74..604d6272e 100644
--- a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
+++ b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
@@ -468,7 +468,7 @@ class DefaultValidationServiceTest {
 
         // Then
         assertFalse(validationResult.isValid());
-        assertThat(validationResult.getError().getMessage(), containsString("$.replyChannel: may only have a maximum of 1 properties"));
+        assertThat(validationResult.getError().getMessage(), containsString("$.replyChannel: must only have a maximum of 1 properties"));
     }
 
     @Test
-- 
GitLab