Created
May 22, 2020 09:55
-
-
Save btshft/2ae3b5f457e475368731bdb72ed6b700 to your computer and use it in GitHub Desktop.
asfsdfsdf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Procedure | |
{ | |
} | |
public class EvaluatedUrlBuildRequirement | |
{ | |
public Procedure EvaluatedOn { get; } | |
public bool IsSatisfied { get; } | |
public Type RequirementType { get; } | |
public EvaluatedUrlBuildRequirement(...) { } | |
} | |
public interface IUrlBuildRequirement | |
{ | |
Task<IEnumerable<EvaluatedUrlBuildRequirement>> EvaluateAsync(IEnumerable<Procedure> procedures); | |
} | |
public class PublishedResultProtocolShouldExist : IUrlBuildRequirement | |
{ | |
private readonly ITradingFacade _facade; | |
public Task<EvaluatedUrlBuildRequirement> EvaluateAsync(Procedure procedure) | |
{ | |
var isProtocolExists = await _facade.IsPublishedResultProtocolExists(procedure.Id); | |
return new EvaluatedUrlBuildRequirement(procedure, isProtocolExists, typeof(PublishedResultProtocolShouldExist).GetType()); | |
} | |
} | |
public interface IUrlBuildRequirementProvider { | |
IEnumerable<IUrlBuildRequirement> GetRequirements(Procedure procedure); | |
} | |
public class UrlBuildRequirementProvider : IUrlBuildRequirementProvider { | |
private readonly ITradingFacade _facade; | |
public IEnumerable<IUrlBuildRequirement> GetRequirements(Procedure procedure) { | |
if (procedureType == OK || procedureType == KOU) { | |
yield return new PublishedResultProtocolShouldExist(_facade); | |
} | |
yield break; | |
} | |
} | |
public async Task<ObjectList<CustomerProcedureShort>> GetProceduresAsync(CustomerProcedureSearchFilter filter) | |
{ | |
[...] | |
var items = proceduresDto.Items.Select(procedureDto => { | |
var requirements = _urlBuildRequirementProvider.GetRequirements(procedureDto); | |
var evaluatedRequirements = await Task.WhenAll(requirements.Select(r => r.EvaluateAsync(procedureDto))); | |
procedure.Shortcuts = specificForProcedureUrlBuilder.GetCustomerProcedureShortcutUrls(procedure, | |
procedureDto.IsCurrentUserCanViewApplications, procedure.AcceptedApplicationCount, procedure.ConfirmedApplicationCount, evaluatedRequirements); | |
}); | |
} | |
/// <inheritdoc /> | |
protected override void AddCustomShortcuts(ProcedureReference procedure, IList<ProcedureShortcut> navigationList, | |
int? acceptedApplicationCount = null, int? confirmedApplicationCount = null, EvaluatedUrlBuildRequirement[] evaluatedRequirements) | |
{ | |
if (StatesResultProtocolVisible.Contains(procedure.State.Id)) | |
{ | |
navigationList.Add(GetCustomerProcedureShortcut(procedure, ProcedureShortcutType.ResultProtocol)); | |
} | |
var prococolPublishedRequirement = evaluatedRequirements.FirstOrDefault(r => r.RequirementType == typeof(PublishedResultProtocolShouldExist)); | |
if (prococolPublishedRequirement != null && prococolPublishedRequirement.IsSatisfied && procedure.State.Id == ProcedureState.NotTookPlace) | |
{ | |
navigationList.Add(GetCustomerProcedureShortcut(procedure, ProcedureShortcutType.ResultProtocol)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment