Skip to content

Commit

Permalink
refactor: reduce duplication in ProactiveConnect UpdateList (#546)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tr00d authored Oct 20, 2023
1 parent 929b331 commit 9e51219
Showing 1 changed file with 20 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using Vonage.Common.Client;
Expand All @@ -18,14 +18,14 @@ internal class UpdateListRequestBuilder : IBuilderForListId, IBuilderForName, IB

/// <inheritdoc />
public Result<UpdateListRequest> Create() => Result<UpdateListRequest>.FromSuccess(new UpdateListRequest
{
Id = this.id,
Attributes = this.attributes.Any() ? this.attributes.ToList() : Maybe<IEnumerable<ListAttribute>>.None,
Description = this.description,
Name = this.name,
Tags = this.tags.Any() ? this.tags.ToList() : Maybe<IEnumerable<string>>.None,
DataSource = this.dataSource,
})
{
Id = this.id,
Attributes = this.attributes.Any() ? this.attributes.ToList() : Maybe<IEnumerable<ListAttribute>>.None,
Description = this.description,
Name = this.name,
Tags = this.tags.Any() ? this.tags.ToList() : Maybe<IEnumerable<string>>.None,
DataSource = this.dataSource,
})
.Map(InputEvaluation<UpdateListRequest>.Evaluate)
.Bind(evaluation => evaluation.WithRules(
VerifyListId,
Expand Down Expand Up @@ -81,29 +81,24 @@ public IBuilderForOptional WithTag(string value)
return this;
}

private static Result<UpdateListRequest> VerifyAttributesAliasLength(UpdateListRequest request)
private static Result<UpdateListRequest> VerifyAttributeLength(UpdateListRequest request,
Func<ListAttribute, string> valueMapping, Func<ListAttribute, string> nameMapping)
{
var results = request.Attributes
.IfNone(Enumerable.Empty<ListAttribute>())
.Select(attribute =>
InputValidation.VerifyLengthLowerOrEqualThan(request, attribute.Alias, 50,
$"{nameof(request.Attributes)} {nameof(attribute.Alias)}"))
InputValidation.VerifyLengthLowerOrEqualThan(request, valueMapping(attribute), 50,
$"{nameof(request.Attributes)} {nameMapping(attribute)}"))
.Where(result => result.IsFailure)
.ToArray();
return results.Any() ? results[0] : request;
}

private static Result<UpdateListRequest> VerifyAttributesNameLength(UpdateListRequest request)
{
var results = request.Attributes
.IfNone(Enumerable.Empty<ListAttribute>())
.Select(attribute =>
InputValidation.VerifyLengthLowerOrEqualThan(request, attribute.Name, 50,
$"{nameof(request.Attributes)} {nameof(attribute.Name)}"))
.Where(result => result.IsFailure)
.ToArray();
return results.Any() ? results[0] : request;
}
private static Result<UpdateListRequest> VerifyAttributesAliasLength(UpdateListRequest request) =>
VerifyAttributeLength(request, attribute => attribute.Alias, attribute => nameof(attribute.Alias));

private static Result<UpdateListRequest> VerifyAttributesNameLength(UpdateListRequest request) =>
VerifyAttributeLength(request, attribute => attribute.Name, attribute => nameof(attribute.Name));

private static Result<UpdateListRequest> VerifyDescriptionLength(UpdateListRequest request) =>
request.Description.Match(
Expand All @@ -112,7 +107,7 @@ private static Result<UpdateListRequest> VerifyDescriptionLength(UpdateListReque

private static Result<UpdateListRequest> VerifyIntegrationIdNotEmptyWhenSalesforce(UpdateListRequest request)
{
var value = request.DataSource.IfNone(new ListDataSource {Type = ListDataSourceType.Manual});
var value = request.DataSource.IfNone(new ListDataSource { Type = ListDataSourceType.Manual });
return value.Type == ListDataSourceType.Salesforce
? InputValidation.VerifyNotEmpty(request, value.IntegrationId,
$"{nameof(request.DataSource)} {nameof(value.IntegrationId)}")
Expand All @@ -131,7 +126,7 @@ private static Result<UpdateListRequest> VerifyNameNotEmpty(UpdateListRequest re

private static Result<UpdateListRequest> VerifySoqlNotEmptyWhenSalesforce(UpdateListRequest request)
{
var value = request.DataSource.IfNone(new ListDataSource {Type = ListDataSourceType.Manual});
var value = request.DataSource.IfNone(new ListDataSource { Type = ListDataSourceType.Manual });
return value.Type == ListDataSourceType.Salesforce
? InputValidation.VerifyNotEmpty(request, value.Soql,
$"{nameof(request.DataSource)} {nameof(value.Soql)}")
Expand Down

0 comments on commit 9e51219

Please # to comment.