public async Task <QueryState> ReadState(QueryETag etag) { var stream = etag.Key.GetCheckpointStream(); var result = await _context.Connection.ReadEventAsync(stream, StreamPosition.End, resolveLinkTos : false); switch (result.Status) { case EventReadStatus.NoStream: case EventReadStatus.NotFound: return(new QueryState(etag.WithoutCheckpoint(), GetDefaultData(etag))); case EventReadStatus.Success: var number = result.Event?.Event.EventNumber; var data = result.Event?.Event.Data; var checkpoint = new TimelinePosition(number); return(checkpoint == etag.Checkpoint ? new QueryState(etag) : new QueryState(etag.WithCheckpoint(checkpoint), new MemoryStream(data))); default: throw new Exception($"Unexpected result when reading {stream}: {result.Status}"); } }
QueryContent GetDefaultContent(QueryETag etag) { var defaultJson = _context.Json.ToJsonUtf8(etag.Key.Type.New()); return(new QueryContent(etag.WithoutCheckpoint(), new MemoryStream(defaultJson))); }