public async Task <DateTime?> GetLastDateModified(Type modelType)
        {
            if (modelType == null)
            {
                throw new ArgumentNullException("modelType parameter cannot be null");
            }
            try
            {
                bool isCacheable = _cachingHelperService.TryGetCacheableTypeName(modelType, out string modelName);
                if (!isCacheable)
                {
                    return(null);
                }

                TableTrackerModel tableTrackerModel = await _tableTrackerRepository.Get(modelName);

                var isDate = DateTime.TryParse(tableTrackerModel?.DateTime, out var date);

                _log.LogInformation("HasTableBeenModifiedSince:  Table tracker value was {tableModifiedDate}", date.ToString());

                if (isDate && date != default(DateTime))
                {
                    return(date);
                }
                return(null);
            }
            catch (Exception ex)
            {
                _log.LogError(ex, "Error occurred while trying to get last modifed date of name: {modelType}.", ex.Message);
                return(null);
            }
        }
Ejemplo n.º 2
0
        public async Task CanReturnNullWhenTrackerTableDateCannotBeParsed(TableTrackerModel testVal)
        {
            var cacheableName = "";

            _cachingHelperServiceMock.Setup(x => x.TryGetCacheableTypeName(It.IsAny <Type>(), out cacheableName)).Returns(true);
            _readRepositoryMock.Setup(x => x.Get(It.IsAny <string>())).Returns(Task.FromResult(testVal));
            var arbitaryTypeForTestCase = typeof(TableTrackerServiceTests);

            var actual = await _sut.GetLastDateModified(arbitaryTypeForTestCase);

            Assert.Null(actual);
        }
        /// <summary>
        /// This is a stop gap to track table data update times. Rplace with table trigger and AWS lambda
        /// Note: this can cause issues around caching requests if this call fails and the preciding update succeeds
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        private Task UpdateTableTracker()
        {
            var instance = Activator.CreateInstance(typeof(T));
            var tracker  = new TableTrackerModel {
                DateTime = DateTime.UtcNow.ToString(
                    TableTrackerRepository.DATE_STORAGE_FORMAT,
                    TableTrackerRepository.DateStorageCulture),
                Name = instance.GetType().Name
            };

            return(_context.SaveAsync(tracker));
        }