Beispiel #1
0
        public FhirResponse GetFhirResponse(Entry entry, object input)
        {
            var parameters = ConvertInput(input);

            if (parameters == null)
            {
                return(null);
            }

            var matchTags = parameters.IfNoneMatchTags.Any()
                ? parameters.IfNoneMatchTags.Any(t => t == ETag.Create(entry.Key.VersionId).Tag)
                : (bool?)null;
            var matchModifiedDate = parameters.IfModifiedSince.HasValue
                ? parameters.IfModifiedSince.Value < entry.Resource.Meta.LastUpdated
                : (bool?)null;

            if (!matchTags.HasValue && !matchModifiedDate.HasValue)
            {
                return(null);
            }

            return((matchTags ?? true) && (matchModifiedDate ?? true)
                ? Respond.WithCode(HttpStatusCode.NotModified)
                : null);
        }
Beispiel #2
0
        public void Configure(IEndpointRouteBuilder builder) => builder
        .MapGet(string.Empty, context => {
            var readModel = context.RequestServices.GetRequiredService <InMemoryReadModel>();

            var hasValue = readModel.TryGetValue <ReadModel>(
                nameof(ChartOfAccounts),
                out var entry);

            var statusCode = hasValue
                                        ? HttpStatusCode.OK
                                        : HttpStatusCode.NotFound;
            var response = new HalResponse(context.Request, new ChartOfAccountsRepresentation(),
                                           ETag.Create(entry?.Item.Checkpoint ?? Optional <Position> .Empty),
                                           hasValue ? new Optional <object>(entry?.Item !) : Optional <object> .Empty);
        //public static HttpResponseMessage HttpResponse(this HttpRequestMessage request, HttpStatusCode code, Entry entry)
        //{
        //    request.SaveEntry(entry);

        //    HttpResponseMessage msg;
        //    msg = request.CreateResponse<Resource>(code, entry.Resource);

        //    // DSTU2: tags
        //    //msg.Headers.SetFhirTags(entry.Tags);
        //    return msg;
        //}

        public static void AcquireHeaders(this HttpResponseMessage response, FhirResponse fhirResponse)
        {
            // http.StatusCode = fhir.StatusCode;
            if (fhirResponse.Key != null)
            {
                response.Headers.ETag = ETag.Create(fhirResponse.Key.VersionId);

                Uri location = fhirResponse.Key.ToUri();

                if (response.Content != null)
                {
                    response.Content.Headers.ContentLocation = location;

                    if (fhirResponse.Resource != null && fhirResponse.Resource.Meta != null)
                    {
                        response.Content.Headers.LastModified = fhirResponse.Resource.Meta.LastUpdated;
                    }
                }
                else
                {
                    response.Headers.Location = location;
                }
            }
        }
        public FhirResponse GetFhirResponse(Interaction interaction, object input)
        {
            ConditionalHeaderParameters parameters = ConvertInput(input);

            if (parameters == null)
            {
                return(null);
            }

            bool?matchTags         = parameters.IfNoneMatchTags.Any() ? parameters.IfNoneMatchTags.Any(t => t == ETag.Create(interaction.Key.VersionId).Tag) : (bool?)null;
            bool?matchModifiedDate = parameters.IfModifiedSince.HasValue
                ? parameters.IfModifiedSince.Value < interaction.Resource.Meta.LastUpdated
                : (bool?)null;

            if (!matchTags.HasValue && !matchModifiedDate.HasValue)
            {
                return(null);
            }

            if ((matchTags ?? true) && (matchModifiedDate ?? true))
            {
                return(Respond.WithCode(HttpStatusCode.NotModified));
            }

            return(null);
        }
 private static string CreateEtag(FileInfo fileInfo)
 {
     return(ETag.Create(fileInfo.FullName, fileInfo.Length, fileInfo.LastWriteTimeUtc.Ticks));
 }
        public static void UsePurchaseOrders(this IEndpointRouteBuilder builder,
                                             PurchaseOrderRepository purchaseOrders)
        {
            builder
            .MapGet(string.Empty, async context => {
                var orders = await purchaseOrders.List(context.RequestAborted);

                return(new HalResponse(context.Request, PurchaseOrderListRepresentation.Instance,
                                       ETag.Create(orders.Max(x => x.Position)), new Optional <object>(orders)));
            })
            .MapPost(string.Empty, async(HttpContext context, PurchaseOrder purchaseOrder) => {
                if (purchaseOrder.PurchaseOrderId == Guid.Empty)
                {
                    purchaseOrder.PurchaseOrderId = Guid.NewGuid();
                }

                await purchaseOrders.Save(purchaseOrder, context.RequestAborted);

                return(new HalResponse(context.Request, PurchaseOrderRepresentation.Instance,
                                       ETag.Create(purchaseOrder.Version), purchaseOrder)
                {
                    StatusCode = HttpStatusCode.Created,
                    Headers =
                    {
                        Location = new Uri(purchaseOrder.PurchaseOrderId.ToString())
                    }
                });
            })
            .MapGet("{purchaseOrderId:guid}", async context => {
                if (!context.TryParseGuid(nameof(PurchaseOrder.PurchaseOrderId), out var purchaseOrderId))
                {
                    return(new HalResponse(context.Request, PurchaseOrderRepresentation.Instance)
                    {
                        StatusCode = HttpStatusCode.NotFound
                    });
                }

                var order = await purchaseOrders.Get(purchaseOrderId, context.RequestAborted);

                return(new HalResponse(context.Request, PurchaseOrderRepresentation.Instance,
                                       ETag.Create(order.HasValue ? order.Value.Position : new long?()), order)
                {
                    StatusCode = order.HasValue ? HttpStatusCode.OK : HttpStatusCode.NotFound
                });
            })
            .MapPut("{purchaseOrderId:guid}", async(HttpContext context, PurchaseOrder purchaseOrder) => {
                if (!context.TryParseGuid(nameof(purchaseOrder.PurchaseOrderId), out var purchaseOrderId))
                {
                    return(new HalResponse(context.Request, PurchaseOrderRepresentation.Instance)
                    {
                        StatusCode = HttpStatusCode.NotFound
                    });
                }

                purchaseOrder.PurchaseOrderId = purchaseOrderId;

                await purchaseOrders.Save(purchaseOrder, context.RequestAborted);

                return(new HalResponse(context.Request, PurchaseOrderRepresentation.Instance,
                                       ETag.Create(purchaseOrder.Version), purchaseOrder));
            })
            .MapBusinessTransaction <PurchaseOrder>("{purchaseOrderId:guid}");
        }