Example #1
0
        /// <summary>
        ///     Loads and returns an aggregate by id, from the store.
        /// </summary>
        public async Task <T> Load <T>(string aggregateId, CancellationToken cancellationToken = default)
            where T : Aggregate, new()
        {
            if (IsNullOrWhiteSpace(aggregateId))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(aggregateId));
            }

            var stream    = _getStreamName(typeof(T), aggregateId);
            var aggregate = new T();

            var nextPageStart = 0L;

            do
            {
                var page = await _connection.ReadStreamEventsForwardAsync(
                    stream, nextPageStart, MaxReadSize, false, _userCredentials);

                if (page.Events.Length > 0)
                {
                    aggregate.Load(
                        page.Events.Last().Event.EventNumber,
                        page.Events.Select(re => _serializer.Deserialize(
                                               re.Event.Data, _typeMapper.GetType(re.Event.EventType)
                                               )).ToArray());
                }

                nextPageStart = !page.IsEndOfStream ? page.NextEventNumber : -1;
            } while (nextPageStart != -1);

            Log.Debug("Loaded {aggregate} changes from stream {stream}", aggregate, stream);

            return(aggregate);
        }
        public static object Deserialze(this ResolvedEvent resolvedEvent)
        {
            var dataType = TypeMapper.GetType(resolvedEvent.Event.EventType);
            var jsonData = Encoding.UTF8.GetString(resolvedEvent.Event.Data);
            var data     = JsonConvert.DeserializeObject(jsonData, dataType);

            return(data);
        }