Exemple #1
0
        public async Task <IReadOnlyCollection <StorageEvent> > ReadStreamForwards(string streamId, int startPosition, int numberOfEventsToRead)
        {
            int endPosition = numberOfEventsToRead == int.MaxValue ? int.MaxValue : startPosition + numberOfEventsToRead;

            var eventsQuery = this.client.CreateDocumentQuery <DocumentDbStorageEvent>(commitsLink)
                              .Where(x => x.StreamId == streamId && x.EventNumber >= startPosition && x.EventNumber <= endPosition)
                              .OrderBy(x => x.EventNumber)
                              .AsDocumentQuery();

            var events = new List <StorageEvent>();

            while (eventsQuery.HasMoreResults)
            {
                var response = await eventsQuery.ExecuteNextAsync <DocumentDbStorageEvent>();

                loggingOptions.OnSuccess(ResponseInformation.FromReadResponse(nameof(ReadStreamForwards), response));

                foreach (var e in response)
                {
                    events.Add(e.ToStorageEvent(this.typeMap));
                }
            }

            return(events.AsReadOnly());
        }
Exemple #2
0
        public async Task <IReadOnlyCollection <StorageEvent> > ReadStreamForwardsFromLast(string streamId, Predicate <StorageEvent> readFromHere)
        {
            using (var eventsQuery = client.CreateDocumentQuery <DocumentDbStorageEvent>(commitsLink)
                                     .Where(x => x.StreamId == streamId)
                                     .OrderByDescending(x => x.EventNumber)
                                     .AsDocumentQuery())
            {
                var eventsInReverseOrder = new List <StorageEvent>();
                var finished             = false;

                while (!finished && eventsQuery.HasMoreResults)
                {
                    var response = await eventsQuery.ExecuteNextAsync <DocumentDbStorageEvent>();

                    loggingOptions.OnSuccess(ResponseInformation.FromReadResponse(nameof(ReadStreamForwardsFromLast), response));

                    foreach (var e in response)
                    {
                        var storageEvent = e.ToStorageEvent(typeMap);
                        eventsInReverseOrder.Add(storageEvent);

                        if (readFromHere(storageEvent))
                        {
                            finished = true;
                            break;
                        }
                    }
                }

                return(eventsInReverseOrder
                       .Reverse <StorageEvent>()
                       .ToList()
                       .AsReadOnly());
            }
        }