public async Task <IEnumerable <PayeView> > GetPayeSchemsWithEnglishFractionForHashedAccountId(string hashedAccountId) { long accountId; try { accountId = _hashingService.DecodeValue(hashedAccountId); } catch (IndexOutOfRangeException) { throw new InvalidRequestException( new Dictionary <string, string> { { nameof(hashedAccountId), "Hashed account ID cannot be decoded." } } ); } var payeSchemes = await _payeRepository.GetPayeSchemesByAccountId(accountId); if (payeSchemes.Count == 0) { return(payeSchemes); } await AddEnglishFractionsToPayeSchemes(accountId, payeSchemes); return(payeSchemes); }
public async Task <GetAccountPayeSchemesResponse> Handle(GetAccountPayeSchemesQuery message) { var validationResult = await _validator.ValidateAsync(message); if (!validationResult.IsValid()) { throw new InvalidRequestException(validationResult.ValidationDictionary); } if (validationResult.IsUnauthorized) { throw new UnauthorizedAccessException(); } var accountId = _hashingService.DecodeValue(message.HashedAccountId); var payeSchemes = await _payeRepository.GetPayeSchemesByAccountId(accountId); if (payeSchemes.Count == 0) { return(new GetAccountPayeSchemesResponse { PayeSchemes = payeSchemes }); } var englishFractions = (await _englishFractionRepository.GetCurrentFractionForSchemes(accountId, payeSchemes.Select(x => x.Ref))).Where(x => x != null).ToList(); foreach (var scheme in payeSchemes) { scheme.EnglishFraction = englishFractions.FirstOrDefault(x => x.EmpRef == scheme.Ref); } return(new GetAccountPayeSchemesResponse { PayeSchemes = payeSchemes }); }