Esempio n. 1
0
        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();
        }
Esempio n. 3
0
        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();
        }