private static Link Feed(ReadStreamMessageByStreamVersionOperation operation) => new Link( Constants.Relations.Feed, LinkFormatter.FormatBackwardLink( $"../{operation.StreamId}", Constants.MaxCount, StreamVersion.End, false));
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)))); }
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)); }
public static Link Message(ReadStreamMessageByStreamVersionOperation operation) => new Link( Constants.Relations.Message, $"{operation.StreamVersion}");
private static Link Next(ReadStreamMessageByStreamVersionOperation operation) => new Link( Constants.Relations.Next, $"{operation.StreamVersion + 1}");
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 } }); }