Exemple #1
0
 private static Link Feed(ReadStreamMessageByStreamVersionOperation operation) => new Link(
     Constants.Relations.Feed,
     LinkFormatter.FormatBackwardLink(
         $"../{operation.StreamId}",
         Constants.MaxCount,
         StreamVersion.End,
         false));
Exemple #2
0
        public async Task <Response> GetMessage(
            ReadStreamMessageByStreamVersionOperation operation,
            CancellationToken cancellationToken)
        {
            var message = await operation.Invoke(_streamStore, cancellationToken);

            if (message.MessageId == Guid.Empty)
            {
                return(new Response(
                           new HALResponse(new
                {
                    operation.StreamId,
                    operation.StreamVersion
                })
                           .AddLinks(Links.Self(operation))
                           .AddLinks(Links.Navigation(operation))
                           .AddLinks(Links.Message(operation)),
                           404));
            }

            if (operation.StreamVersion == StreamVersion.End)
            {
                return(new Response(new HALResponse(new object()), 307)
                {
                    Headers =
                    {
                        [Constants.Headers.Location] = new[] { $"{message.StreamVersion}" }
                    }
                });
            }

            var payload = await message.GetJsonData(cancellationToken);

            return(new Response(
                       new HALResponse(new
            {
                message.MessageId,
                message.CreatedUtc,
                message.Position,
                message.StreamId,
                message.StreamVersion,
                message.Type,
                payload,
                metadata = message.JsonMetadata
            })
                       .AddLinks(Links.Self(operation))
                       .AddLinks(Links.Navigation(operation, message))
                       .AddLinks(Links.Message(operation))));
        }
Exemple #3
0
            public static IEnumerable <Link> Navigation(
                ReadStreamMessageByStreamVersionOperation operation,
                StreamMessage message = default(StreamMessage))
            {
                yield return(First());

                if (operation.StreamVersion > 0)
                {
                    yield return(Previous(operation));
                }

                if (message.MessageId != default(Guid))
                {
                    yield return(Next(operation));
                }

                yield return(Last());

                yield return(Feed(operation));
            }
Exemple #4
0
 public static Link Message(ReadStreamMessageByStreamVersionOperation operation) => new Link(
     Constants.Relations.Message,
     $"{operation.StreamVersion}");
Exemple #5
0
 private static Link Next(ReadStreamMessageByStreamVersionOperation operation) => new Link(
     Constants.Relations.Next,
     $"{operation.StreamVersion + 1}");
Exemple #6
0
 private static Link Previous(ReadStreamMessageByStreamVersionOperation operation) => new Link(
     Constants.Relations.Previous,
     $"{operation.StreamVersion - 1}");
        public async Task <Response> Get(
            ReadStreamMessageByStreamVersionOperation operation,
            CancellationToken cancellationToken)
        {
            var message = await operation.Invoke(_streamStore, cancellationToken);

            if (message.MessageId == Guid.Empty)
            {
                return(new Response(
                           new HALResponse(new
                {
                    operation.StreamId,
                    operation.StreamVersion
                })
                           .AddLinks(Links.Self(operation))
                           .AddLinks(Links.Navigation(operation))
                           .AddLinks(Links.Message(operation))
                           .AddLinks(Links.Find()),
                           404));
            }

            if (operation.StreamVersion == StreamVersion.End)
            {
                return(new Response(new HALResponse(new object()), 307)
                {
                    Headers =
                    {
                        [Constants.Headers.Location] = new[] { $"{message.StreamVersion}" }
                    }
                });
            }

            var payload = await message.GetJsonData(cancellationToken);

            var eTag = ETag.FromStreamVersion(message.StreamVersion);

            return(new Response(
                       new HALResponse(new
            {
                message.MessageId,
                message.CreatedUtc,
                message.Position,
                message.StreamId,
                message.StreamVersion,
                message.Type,
                payload,
                metadata = message.JsonMetadata
            })
                       .AddEmbeddedResource(
                           Constants.Relations.Delete,
                           Schemas.DeleteStreamMessage)
                       .AddLinks(Links.Self(operation))
                       .AddLinks(Links.Navigation(operation, message))
                       .AddLinks(Links.Message(operation))
                       .AddLinks(Links.Find()))
            {
                Headers =
                {
                    eTag,
                    CacheControl.OneYear
                }
            });
        }