diff --git a/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java b/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java index e54db66b7447a324cbc047f4608717c91f3e4db2..c5c9d88b5af7dd7220a1fc9cba843d5de3f32093 100644 --- a/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java +++ b/api/src/main/java/de/fitko/fitconnect/api/services/Sender.java @@ -5,20 +5,20 @@ import de.fitko.fitconnect.api.domain.auth.OAuthToken; import de.fitko.fitconnect.api.domain.model.metadata.Metadata; import de.fitko.fitconnect.api.domain.model.metadata.attachment.Attachment; 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.*; import java.io.File; import java.util.List; -import java.util.Optional; import java.util.UUID; /** * A technical system that creates a submission via the FIT-Connect Submission API. * <p> * The Sender acts as a common interface wrapping all client functionality to authenticate <p> - * and create a valid {@link SubmissionRequest} including encrypted {@link Data} and {@link Attachment}s + * and create a valid {@link SubmissionSubmit} including encrypted {@link Data} and {@link Attachment}s * * @see <a href="https://docs.fitko.de/fit-connect/docs/sending/overview">Sending Submissions</a> */ @@ -36,39 +36,39 @@ public interface Sender { * Encrypts the submission data payload (json or xml) with JWE (JSON-Web-Encryption). * * @param publicKey the public encryption key the data is encrypted with - * @param data the {@link Data} payload that is encrypted + * @param data the {@link Data} payload that is encrypted * @return the JWE-encrypted {@link Data}, is empty if en error occurred */ - Optional<Data> encryptSubmissionData(final RSAKey publicKey, final Data data); + Data encryptSubmissionData(final RSAKey publicKey, final Data data) throws EncryptionException; /** * Encrypts the submission attachment binary data with JWE (JSON-Web-Encryption). * - * @param publicKey the public encryption key the attachment is encrypted with + * @param publicKey the public encryption key the attachment is encrypted with * @param attachment the {@link Attachment} that is encrypted * @return the JWE-encrypted {@link Attachment}, is empty if en error occurred */ - Optional<Attachment> encryptAttachment(final RSAKey publicKey, final Attachment attachment); + Attachment encryptAttachment(final RSAKey publicKey, final Attachment attachment) throws EncryptionException; /** * Authenticates the {@link Sender} against the FitConnect-Auth-API and retrieves an {@link OAuthToken}. * - * @param clientId a unique client identifier + * @param clientId a unique client identifier * @param clientSecret the applications secret key - * @param scope 1 or more client scopes that determine if a submission is accepted by the client + * @param scope 1 or more client scopes that determine if a submission is accepted by the client * @return {@link OAuthToken}, is empty if an error occurred */ - Optional<OAuthToken> retrieveOAuthToken(final String clientId, final String clientSecret, final String... scope); + OAuthToken retrieveOAuthToken(final String clientId, final String clientSecret, final String... scope) throws AuthenticationException; /** * Creates and uploads a {@link Metadata} object that contains {@link Data}, {@link Attachment} and their hashes so a subscriber * can verify the integrity. * - * @param data {@link Data} object of the json or xml payload + * @param data {@link Data} object of the json or xml payload * @param attachments a list of binary {@link Attachment}s * @return a valid {@link Metadata} object with hashed {@link Data} and {@link Attachment}s, is empty if an error occurred */ - Optional<Metadata> createMetadata(final Data data, final List<Attachment> attachments); + Metadata createMetadata(final Data data, final List<Attachment> attachments) throws MetadataNotCreatedException; /** * Creates and uploads a {@link Metadata} object that contains {@link Data}, {@link Attachment} and their hashes so a subscriber @@ -77,30 +77,28 @@ public interface Sender { * @param attachments a list of binary {@link Attachment}s * @return a valid {@link Metadata} object with hashed {@link Data} and {@link Attachment}s, is empty if an error occurred */ - Optional<Metadata> createMetadata(final List<Attachment> attachments); + Metadata createMetadata(final List<Attachment> attachments) throws MetadataNotCreatedException; /** - * Creates and announces a new {@link SubmissionRequest} + * Creates and announces a new {@link SubmissionSubmit} * * @param submission with a destinationId, a list of attachmentIds and a serviceType * @return the created submission */ - Optional<CreatedSubmission> createSubmission(SubmissionRequest submission); + SubmissionForPickup createSubmission(SubmissionSubmit submission) throws SubmissionNotCreatedException; /** - * Posts the announced {@link SubmissionRequest} + * Posts the announced {@link SubmissionSubmit} * - * @param submissionId identifier of the announced submission + * @param submissionId identifier of the announced submission * @param encryptedMetadata the encrypted metadata - * * @return the submission */ - Optional<CreatedSubmission> sendSubmission(UUID submissionId, Metadata encryptedMetadata); - + SubmissionForPickup sendSubmission(UUID submissionId, Metadata encryptedMetadata) throws SubmissionNotSentException; - void uploadAttachments(UUID submissionId, List<Attachment> encryptedAttachments); + void uploadAttachments(UUID submissionId, List<Attachment> encryptedAttachments) throws AttachmentUploadException; - Optional<Attachment> createAttachment(File file); + Attachment createAttachment(File file) throws AttachmentCreationException; - RSAKey getEncryptionKeyForDestination(UUID destinationId); + RSAKey getEncryptionKeyForDestination(UUID destinationId) throws KeyNotRetrievedException; }