using System; using System.Collections.Generic; using FitConnect.Models; namespace FitConnect; public interface IFluentSender { /// <summary> /// Configures the client for the given destination and loads the public key /// </summary> /// <param name="destinationId">unique identifier of the clients destination</param> /// <returns>the upload step for attachments</returns> public IFluentSenderWithDestination WithDestination(string destinationId); public IFluentSenderWithData WithData(string data); /// <summary> /// Send submission to FIT-Connect API. /// </summary> /// <returns>submitted submission</returns> public Submission Submit(); } public interface IFluentSenderWithDestination { /// <summary> /// Sends the submission with a list of attachments /// </summary> /// <param name="attachments">that are sent with the submission</param> /// <returns>the step where additional data can be added to the submission</returns> public IFluentSenderWithAttachments WithAttachments(IEnumerable<Attachment> attachments); } public interface IFluentSenderWithAttachments : IFluentSenderReady { /// <summary> /// Data as string. /// </summary> /// <param name="data">json or xml as string</param> /// <returns>next step to submit the data</returns> public IFluentSenderWithData WithData(string data); } public interface IFluentSenderWithData : IFluentSenderReady { } public interface IFluentSenderReady { /// <summary> /// Send submission to FIT-Connect API. /// </summary> /// <returns>submitted submission</returns> public IFluentSender Submit(); } public interface IFluentSubscriber { /// <summary> /// Loads a list of available Submissions that were submitted to the subscriber. /// </summary> /// <returns>List of available submissions for pickup</returns> public IEnumerable<string> GetAvailableSubmissions(string? destinationId = null); /// <summary> /// Loads a single Submission by id. /// </summary> /// <param name="submissionId">unique identifier of a <see cref="Submission"/></param> /// <returns></returns> public IFluentSubscriberWithSubmission RequestSubmission(string submissionId); } public interface IFluentSubscriberWithSubmission { public Submission Submission { get; } /// <summary> /// Loads the <see cref="Attachment"/>s for the given <see cref="Submission"/>. /// </summary> /// <param name="canSubmitSubmission">Function that returns a boolean if the <see cref="Submission"/> can be confirmed</param> /// <returns></returns> public IFluentSenderWithAttachments GetAttachments( Func<IEnumerable<Attachment>, bool> canSubmitSubmission); }