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); } }
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)); }