Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }