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));
        }
Пример #6
0
        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);
        }