private async Task <CheckSummary> CheckCustomerByType(string apiType, ICustomerChecksInfo customer, ISpiderCheckResult currentResult) { if (!customer.GetIsCheckRequired(apiType)) { return(CheckSummary.Empty); } var clientId = customer.CustomerId; var previousResultId = customer.GetLatestCheckId(apiType); var previousResult = await _spiderCheckResultRepository.GetAsync(clientId, previousResultId); var diff = _diffService.ComputeDiff(apiType, currentResult, previousResult); var summary = CheckSummary.FromDiff(diff); if (summary.IsSuspected) { var document = await _spiderCheckProcessingService.UploadSpiderCheck(clientId, apiType, UploadRequest); await _spiderDocumentInfoRepository.AddOrUpdateAsync(new SpiderDocumentInfo { CustomerId = clientId, DocumentId = document.DocumentId, CheckDiff = Mapper.Map <SpiderCheckResultDiff>(diff), CurrentCheckId = currentResult.ResultId, PreviousCheckId = previousResultId }); await _customerChecksInfoRepository.UpdateCheckStatesAsync(clientId, apiType, false); } await _customerChecksInfoRepository.UpdateLatestCheckIdAsync(clientId, apiType, currentResult.ResultId); return(summary); }
public async Task <ICustomerChecksInfo> AddAsync(ICustomerChecksInfo entity) { var newEntity = CustomerChecksInfoEntity.Create(entity); await _tableStorage.InsertOrReplaceAsync(newEntity); return(newEntity); }
public static string GetLatestCheckId(this ICustomerChecksInfo customer, string apiType) { switch (apiType) { case PepSpiderCheck.ApiType: return(customer.LatestPepCheckId); case CrimeSpiderCheck.ApiType: return(customer.LatestCrimeCheckId); case SanctionSpiderCheck.ApiType: return(customer.LatestSanctionCheckId); default: throw new InvalidOperationException(); } }
public static bool GetIsCheckRequired(this ICustomerChecksInfo customer, string apiType) { switch (apiType) { case PepSpiderCheck.ApiType: return(customer.IsPepCheckRequired); case CrimeSpiderCheck.ApiType: return(customer.IsCrimeCheckRequired); case SanctionSpiderCheck.ApiType: return(customer.IsSanctionCheckRequired); default: throw new InvalidOperationException(); } }
private async Task <GlobalCheckInfo> CheckCustomer(ICustomerChecksInfo customer) { if (!customer.IsPepCheckRequired && !customer.IsCrimeCheckRequired && !customer.IsSanctionCheckRequired) { return(SkippedClientCheckInfo); } var clientId = customer.CustomerId; var currentResult = await _spiderCheckService.CheckAsync(clientId); var pepSummary = await CheckCustomerByType(PepSpiderCheck.ApiType, customer, currentResult); var crimeSummary = await CheckCustomerByType(CrimeSpiderCheck.ApiType, customer, currentResult); var sanctionSummary = await CheckCustomerByType(SanctionSpiderCheck.ApiType, customer, currentResult); return(CalcClientCheckInfo(pepSummary, crimeSummary, sanctionSummary)); }
public static CustomerChecksInfoEntity Create(ICustomerChecksInfo src) { var entity = new CustomerChecksInfoEntity { PartitionKey = GeneratePartitionKey(src.CustomerId), RowKey = GenerateRowKey(src.CustomerId), LatestPepCheckId = src.LatestPepCheckId, LatestCrimeCheckId = src.LatestCrimeCheckId, LatestSanctionCheckId = src.LatestSanctionCheckId, IsPepCheckRequired = src.IsPepCheckRequired, IsCrimeCheckRequired = src.IsCrimeCheckRequired, IsSanctionCheckRequired = src.IsSanctionCheckRequired }; entity.MarkValueTypePropertyAsDirty(nameof(IsPepCheckRequired)); entity.MarkValueTypePropertyAsDirty(nameof(IsCrimeCheckRequired)); entity.MarkValueTypePropertyAsDirty(nameof(IsSanctionCheckRequired)); return(entity); }