예제 #1
0
        public async Task <ImpactOfBaseRateChange> CalculateImpactOfBaseRateChange
        (
            long userId,
            long agreementId,
            BaseRateCodeEnum newBaseRate
        )
        {
            var userRepo = this.uow.GetRepository <User>();
            var user     = await userRepo.GetAsync(
                u => u.Id == userId && u.Agreements.Any(a => a.Id == agreementId),
                u => u.Include(x => x.Agreements)
                ) ?? throw new EntityNotFoundException($"User with Id: {userId}, which has an agreement with Id: {agreementId}, was not found.");

            var targetAgreement = user.Agreements.Single(a => a.Id == agreementId);

            var baseRatesCodes = new List <BaseRateCodeEnum> {
                targetAgreement.BaseRateCodeId, newBaseRate
            };
            var baseRateTasks = baseRatesCodes.Select(brc => this.baseRateService.GetBaseRate(brc));
            var baseRates     = await Task.WhenAll(baseRateTasks);

            var currentInterestRate = targetAgreement.CalculateInterestRate(baseRates.First());
            var newInterestRate     = targetAgreement.CalculateInterestRate(baseRates.Last());

            return(new ImpactOfBaseRateChange
            {
                User = user.ToDto(),
                Agreement = targetAgreement.ToDto(),
                CurrentInterestRate = currentInterestRate,
                NewInterestRate = newInterestRate,
                InterestRateDifference = Math.Abs(newInterestRate - currentInterestRate)
            });
        }
예제 #2
0
 public async Task <ActionResult> CalculateBaseRateChangeImpact(
     [FromRoute] long userId,
     [FromRoute] long agreementId,
     [FromQuery][Required] BaseRateCodeEnum newBaseRate
     )
 {
     return(Ok(await this.interestRateService.CalculateImpactOfBaseRateChange(userId, agreementId, newBaseRate)));
 }
예제 #3
0
        public async Task <decimal> GetBaseRate(BaseRateCodeEnum baseRateCode)
        {
            var endpoint = $"http://www.lb.lt/webservices/VilibidVilibor/VilibidVilibor.asmx/getLatestVilibRate?RateType={baseRateCode.ToString()}";
            var response = await this.httpClient.GetAsync(endpoint);

            if (!response.IsSuccessStatusCode)
            {
                throw new IntegrationFailedException("Failed to retrieve the latest Vilib rate from www.lb.lt");
            }

            var content = await response.Content.ReadAsStringAsync();

            XDocument xmlContent       = XDocument.Parse(content);
            var       baseRateAsString = (xmlContent.FirstNode as XElement).Value;
            var       baseRate         = decimal.Parse(baseRateAsString, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);

            return(baseRate);
        }