public async Task SavePositionAsync(EventPosition commitPosition)
        {
            try
            {
                var filter          = Builders <NoSqlPosition> .Filter.Empty;
                var documentsResult = await this._documentUnitOfWork.NoSqlPositionRepository.FindAsync(filter);

                if (!documentsResult.Any())
                {
                    var noSqlDocument = NoSqlPosition.CreateNoSqlPosition(commitPosition.CommitPosition);
                    await this._documentUnitOfWork.NoSqlPositionRepository.InsertOneAsync(noSqlDocument);
                }
                else
                {
                    var noSqlDocument = documentsResult.First();
                    var updateCommand = noSqlDocument.UpdatePosition(commitPosition.CommitPosition);
                    var filterUpdate  = Builders <NoSqlPosition> .Filter.Eq("_id", noSqlDocument.Id);

                    await this._documentUnitOfWork.NoSqlPositionRepository.UpdateOneAsync(filterUpdate, updateCommand);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(CommonServices.GetErrorMessage(ex));
            }
        }
Example #2
0
        public async Task SaveLastPositionAsync(EventStorePosition position)
        {
            try
            {
                var filter          = Builders <NoSqlPosition> .Filter.Empty;
                var documentResults = await this._documentUnitOfWork.NoSqlPositionRepository.FindAsync(filter);

                if (!documentResults.Any())
                {
                    var noSqlDocument = NoSqlPosition.CreateNoSqlPosition(position);
                    await this._documentUnitOfWork.NoSqlPositionRepository.InsertOneAsync(noSqlDocument);
                }
                else
                {
                    if (position.CommitPosition > documentResults.First().LastPosition.CommitPosition)
                    {
                        var update = documentResults.First().UpdateLastPostion(position);
                        filter = Builders <NoSqlPosition> .Filter.Eq("_id", documentResults.First().Id);

                        await this._documentUnitOfWork.NoSqlPositionRepository.UpdateOneAsync(filter, update);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }