private async Task ExecuteForVxxx <T>(Func <Task <T> > build, string type) where T : IEquatable <T> { _ContentDb ??= _ContentDbProvider(); await using var tx = _ContentDb.BeginTransaction(); var candidate = await build(); if (!await ShouldWriteCandidateAsync(candidate, type)) { _Logger.WriteUpdateNotRequired(); return; } _Logger.WriteStart(); var snapshot = _DateTimeProvider.Snapshot; var e = new ContentEntity { Created = snapshot, Release = snapshot, Type = type }; await _FormatterForV3().FillAsync(e, candidate); _Result.Updated = true; _ContentDb.Add(e); _ContentDb.SaveAndCommit(); _Logger.WriteFinished(); }
private async Task Execute <T>(Func <Task <T> > build, string contentType) where T : IEquatable <T> { _ContentDb ??= _ContentDbProvider(); await using var tx = _ContentDb.BeginTransaction(); var candidate = await build(); if (await ShouldLeaveCurrentManifestAsync(candidate, contentType)) { _Logger.WriteUpdateNotRequired(); return; } _Logger.WriteStart(); var snapshot = _DateTimeProvider.Snapshot; var contentEntity = new ContentEntity { Created = snapshot, Release = snapshot, Type = contentType }; await _Formatter().FillAsync(contentEntity, candidate); _ContentDb.Add(contentEntity); _ContentDb.SaveAndCommit(); _Logger.WriteFinished(); }
private async Task Execute <T>(Func <Task <T> > build, string contentType) where T : IEquatable <T> { var snapshot = _DateTimeProvider.Snapshot; _ContentDb ??= _ContentDbProvider(); await using var tx = _ContentDb.BeginTransaction(); var currentManifestData = await _ContentDb.SafeGetLatestContentAsync(contentType, snapshot); var candidateManifest = await build(); if (currentManifestData != null) { var currentManifest = ParseContent <T>(currentManifestData.Content); if (candidateManifest.Equals(currentManifest)) { // If current manifest equals existing manifest, do nothing _Logger.WriteUpdateNotRequired(); return; } // If current manifest does not equal existing manifest, then replace current manifest. _ContentDb.Remove(currentManifestData); } _Logger.WriteStart(); var contentEntity = new ContentEntity { Created = snapshot, Release = snapshot, Type = contentType }; await _Formatter().FillAsync(contentEntity, candidateManifest); _ContentDb.Add(contentEntity); _ContentDb.SaveAndCommit(); _Logger.WriteFinished(); }