Newer
Older
using System.Text.RegularExpressions;
using FitConnect.Models;
public class SubmissionBuilder : ISubmissionWithDestination,
ISubmissionWithServiceType, ISubmissionWithData {
private readonly SendableSubmission _submissionToSend;
private SubmissionBuilder(string destinationId) {
_submissionToSend = new SendableSubmission(destinationId);
public static ISubmissionWithDestination WithDestination(string destinationId) {
throw new ArgumentException("The destination must be a valid GUID");
var result = new SubmissionBuilder(destinationId);
return result;
}
public ISubmissionWithServiceType WithServiceType(string serviceName, string leikaKey) {
if (string.IsNullOrWhiteSpace(leikaKey) || !Regex.IsMatch(leikaKey,
throw new ArgumentException("Invalid leika key");
}
_submissionToSend.ServiceName = serviceName;
_submissionToSend.LeikaKey = leikaKey;
return this;
}
public ISubmissionWithData WithAttachments(List<Attachment> attachments) =>
public ISubmissionWithData WithAttachments(params Attachment[] attachments) {
_submissionToSend.Attachments = attachments;
return this;
}
public ISubmissionWithData WithData(string data) {
try {
JsonConvert.DeserializeObject(data);
}
catch (Exception e) {
throw new ArgumentException("The data must be valid JSON string", e);
}
_submissionToSend.Data = data;
return this;
}
public SendableSubmission Build() => _submissionToSend;
public class SendableSubmission {
public string DestinationId { get; internal set; }
public string? ServiceName { get; internal set; }
public string? LeikaKey { get; internal set; }
public Attachment[]? Attachments { get; internal set; }
public string? Data { get; internal set; }
internal SendableSubmission(string destinationId) {
DestinationId = destinationId;
}
}
public interface ISubmissionWithDestination {
ISubmissionWithServiceType WithServiceType(string serviceName, string leikaKey);
}
public interface ISubmissionWithServiceType {
ISubmissionWithData WithData(string data);
}
public interface ISubmissionWithData {
ISubmissionWithData WithAttachments(params Attachment[] attachments);
ISubmissionWithData WithAttachments(List<Attachment> attachments);