Example #1
0
        public FundingClaimSigningDto Convert(int currentPageNumber, SyndicationItem feedItem)
        {
            var feedItemDetails = _syndicationFeedParserService.RetrieveDataFromSyndicationItem(feedItem);

            if (string.IsNullOrEmpty(feedItemDetails.FundingClaimId))
            {
                throw new ArgumentNullException("Funding claim id missing");
            }

            var idParts = feedItemDetails.FundingClaimId.Split('_');

            if (idParts.Length != 3)
            {
                throw new Exception($"invalid funding claim id : {feedItemDetails.FundingClaimId}");
            }

            int.TryParse(idParts[2], out var version);
            int.TryParse(idParts[1], out var ukprn);

            var dto = new FundingClaimSigningDto(feedItemDetails.FundingClaimId)
            {
                IsSigned          = feedItemDetails.HasBeenSigned,
                SyndicationFeedId = feedItem.Id.SyndicationId(),
                FeedDateTimeUtc   = feedItem.LastUpdatedTime.UtcDateTime,
                Ukprn             = ukprn,
                Version           = version,
                CollectionName    = idParts[0],
                PageNumber        = currentPageNumber
            };

            return(dto);
        }
        public async Task SaveFeedItemAsync(CancellationToken cancellationToken, FundingClaimSigningDto feedItem)
        {
            try
            {
                if (feedItem == null)
                {
                    _logger.LogInfo("No new items to save for funding claim feed items");
                    await UpdateLastPollDateTimeAsync(cancellationToken);

                    return;
                }

                using (var context = _fundingclaimsDataContextFactory())
                {
                    var entry = await context.SigningNotificationFeed.SingleOrDefaultAsync(cancellationToken);

                    if (entry == null)
                    {
                        entry = new SigningNotificationFeed();
                        context.SigningNotificationFeed.Add(entry);
                    }

                    entry.FeedDateTimeUtc    = feedItem.FeedDateTimeUtc;
                    entry.PageNumber         = feedItem.PageNumber;
                    entry.SyndicationFeedId  = feedItem.SyndicationFeedId;
                    entry.DateTimeUpdatedUtc = _dateTimeProvider.GetNowUtc();

                    await context.SaveChangesAsync(cancellationToken);
                }

                _logger.LogInfo($"Funding claims Signing updates - Added {feedItem}");
            }
            catch (Exception e)
            {
                _logger.LogError("Error occured while saving latest feed item", e);
                throw;
            }
        }