/// <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); aggregate.Load(page.Events.Select(resolvedEvent => { var dataType = _typeMapper.GetType(resolvedEvent.Event.EventType); var data = _serializer.Deserialize(resolvedEvent.Event.Data, dataType); return(data); }).ToArray()); nextPageStart = !page.IsEndOfStream ? page.NextEventNumber : -1; } while (nextPageStart != -1); Log.Debug("Loaded {aggregate} changes from stream {stream}", aggregate, stream); return(aggregate); }
/// <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() { var stream = _getStreamName(typeof(T), aggregateId); var aggregate = new T(); var nextPageStart = 0L; do { var page = await _connection.ReadStreamEventsForwardAsync( stream, nextPageStart, MaxReadSize, false, _userCredentials); aggregate.Load(page.Events.Select(resolvedEvent => { var dataType = _typeMapper.GetType(resolvedEvent.Event.EventType); var data = _serializer.Deserialize(resolvedEvent.Event.Data, dataType); return(data); }).ToArray()); nextPageStart = !page.IsEndOfStream ? page.NextEventNumber : -1; } while (nextPageStart != -1); return(aggregate); }
private Action <EventStoreCatchUpSubscription, ResolvedEvent> EventAppeared(Projection projection) => async(_, e) => { // always double check if it is a system event ;) if (e.OriginalEvent.EventType.StartsWith("$")) { return; } // get the configured clr type name for deserializing the event var eventType = _typeMapper.GetType(e.Event.EventType); // try to execute the projection await projection.Handle(_serializer.Deserialize(e.Event.Data, eventType)); // store the current checkpoint await _checkpointStore.SetCheckpoint(e.OriginalPosition, projection); };
/// <summary> /// Loads and returns an aggregate by id, from the store. /// </summary> public async Task <T> Load <T>(string aggregateId) where T : Aggregate, new() { var stream = _getStreamName(typeof(T), aggregateId); var aggregate = new T(); var page = await _connection.ReadStreamEventsForwardAsync( stream, 0, 1000, false, _userCredentials); aggregate.Load(page.Events.Select(resolvedEvent => { var dataType = _typeMapper.GetType(resolvedEvent.Event.EventType); var data = JsonConvert.DeserializeObject( Encoding.UTF8.GetString(resolvedEvent.Event.Data), dataType, DefaultSettings); return(data); }).ToArray()); return(aggregate); }