Exemple #1
0
        public async Task <Response> GetPage(ReadStreamOptions options, CancellationToken cancellationToken)
        {
            var operation = options.GetReadOperation();

            var page = await operation.Invoke(_streamStore, cancellationToken);

            var payloads = await Task.WhenAll(page.Messages
                                              .Select(message => options.EmbedPayload
                    ? message.GetJsonData(cancellationToken)
                    : Task.FromResult <string>(null))
                                              .ToArray());

            return(new Response(
                       new HALResponse(new object())
                       .AddLinks(StreamLinks.Self(options))
                       .AddLinks(StreamLinks.Navigation(page, options.Self))
                       .AddLinks(StreamLinks.Feed(page))
                       .AddEmbeddedCollection(
                           Relations.Message,
                           page.Messages.Zip(payloads,
                                             (message, payload) => new HALResponse(new
            {
                message.MessageId,
                message.CreatedUtc,
                message.Position,
                message.StreamId,
                message.StreamVersion,
                message.Type,
                payload
            }).AddLinks(StreamMessageLinks.Self(message))))));
        }
        private static MidFunc GetStream(StreamResource stream) => next => async env =>
        {
            var context = new OwinContext(env);

            var options = new ReadStreamOptions(context.Request);

            var response = await stream.GetPage(options, context.Request.CallCancelled);

            await context.WriteHalResponse(response);
        };
Exemple #3
0
 public static Link Self(ReadStreamOptions options) => new Link(
     Relations.Self,
     options.Self);