public async Task CreateAsync(EmailProvider entity, CancellationToken ct) { entity.Version++; await _dbContext.EmailProviders.InsertOneAsync(entity, new InsertOneOptions(), ct); if (entity.DomainEvents.Count > 0) { await Task.WhenAll(entity.DomainEvents.Select(x => _mediator.Publish(x, ct))); entity.ClearDomainEvents(); } }
public async Task UpdateAsync(EmailProvider entity, CancellationToken ct) { var filter = Builders <EmailProvider> .Filter.And( Builders <EmailProvider> .Filter.Eq(x => x.Id, entity.Id), Builders <EmailProvider> .Filter.Eq(x => x.Version, entity.Version) ); entity.Version = (entity.Version == int.MaxValue ? int.MinValue : entity.Version) + 1; var result = await _dbContext.EmailProviders .ReplaceOneAsync(filter, entity, new ReplaceOptions { IsUpsert = false }, ct); if (result.ModifiedCount == 0) { throw new MongoUpdateException($"Email provider '{entity.Id}' not updated"); } if (entity.DomainEvents.Count > 0) { await Task.WhenAll(entity.DomainEvents.Select(x => _mediator.Publish(x, ct))); entity.ClearDomainEvents(); } }