public async Task <EventWriteResult> Save(List <IEvent> events, string streamName, long expectedVersion) { var eventWriteResult = new EventWriteResult(); var eventData = events .Select(MapEventToEventData) .ToArray(); try { await _connection.AppendToStreamAsync(streamName, expectedVersion, eventData); eventWriteResult.WriteStatus = WriteStatus.Success; } catch (WrongExpectedVersionException ex) { _logger.LogWarning(ex, "WrongExpectedVersionException"); eventWriteResult.WriteStatus = WriteStatus.WrongExpectedVersion; } catch (Exception ex) { _logger.LogError($"Exception of type [{ex.GetType().Name}] - Message = {ex.Message}"); eventWriteResult.WriteStatus = WriteStatus.Error; } return(eventWriteResult); }
public async Task <EventWriteResult> Save(IAggregate aggregate) { var streamName = _streamNameProvider.GetStreamName(Type, aggregate.Id); EventWriteResult result; bool committed = false; if (!aggregate.HasProcessed) { result = await _eventPersistenceClient.Save(aggregate.GetPendingChanges().ToList(), streamName, aggregate.ExpectedVersion); committed = true; } else { result = new EventWriteResult() { WriteStatus = WriteStatus.AlreadyProcessed }; } aggregate.ClearPendingChanges(committed); return(result); }