Skip to content
Snippets Groups Projects
IFluentApi.cs 2.70 KiB
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);
}