public override async Task <ReadModelEnvelope <TReadModel> > GetAsync(string id, CancellationToken cancellationToken) { var readModelType = typeof(TReadModel); var stream = id == "null" ? readModelType.Name.ToLowerInvariant() : $"{readModelType.Name.ToLowerInvariant()}-{id}"; var(lastMessage, found) = await _client.DB().ReadLastMessageFromStream(stream); if (!found) { Log.Verbose(() => $"Could not find any StreamsDb read model '{readModelType.PrettyPrint()}' with ID '{id}'"); return(ReadModelEnvelope <TReadModel> .Empty(id)); } var json = Encoding.UTF8.GetString(lastMessage.Value); var readModel = JsonConvert.DeserializeObject <TReadModel>(json); var readModelVersion = lastMessage.Position; Log.Verbose(() => $"Found StreamsDb read model '{readModelType.PrettyPrint()}' with ID '{id}' and version '{readModelVersion}'"); return(ReadModelEnvelope <TReadModel> .With(id, readModel, readModelVersion)); }
public async Task <AllCommittedEventsPage> LoadAllCommittedEvents(GlobalPosition globalPosition, int pageSize, CancellationToken cancellationToken) { var streamsDbMessages = new List <Message>(); IGlobalSlice currentSlice; var from = globalPosition.IsStart ? StreamsDB.Driver.GlobalPosition.Begin : StreamsDB.Driver.GlobalPosition.Begin.Parse(globalPosition.Value); do { currentSlice = await _client.DB().ReadGlobalForward(from, pageSize).ConfigureAwait(false); from = currentSlice.Next; streamsDbMessages.AddRange(currentSlice.Messages); }while (streamsDbMessages.Count < pageSize && currentSlice.HasNext); var eventFlowEvents = Map(streamsDbMessages); return(new AllCommittedEventsPage(new GlobalPosition(currentSlice.Next.ToString()), eventFlowEvents)); }
private async Task InitializeCursors() { var(message, found) = await _client.DB().ReadLastMessageFromStream(_cursorsStream); _cursor = found ? JsonConvert.DeserializeObject <long>(Encoding.UTF8.GetString(message.Value)) : 0; }