Exemplo n.º 1
0
        public ResourceElement CreateSearchBundle(SearchResult result)
        {
            return(CreateBundle(result, Bundle.BundleType.Searchset, r =>
            {
                var resource = new RawBundleEntryComponent(r.Resource);

                resource.FullUrlElement = new FhirUri(_urlResolver.ResolveResourceWrapperUrl(r.Resource));
                resource.Search = new Bundle.SearchComponent
                {
                    Mode = r.SearchEntryMode == SearchEntryMode.Match ? Bundle.SearchEntryMode.Match : Bundle.SearchEntryMode.Include,
                };

                return resource;
            }));
        }
Exemplo n.º 2
0
        public ResourceElement CreateHistoryBundle(SearchResult result)
        {
            return(CreateBundle(result, Bundle.BundleType.History, r =>
            {
                var resource = new RawBundleEntryComponent(r.Resource);
                var hasVerb = Enum.TryParse(r.Resource.Request?.Method, true, out Bundle.HTTPVerb httpVerb);

                resource.FullUrlElement = new FhirUri(_urlResolver.ResolveResourceWrapperUrl(r.Resource, true));
                resource.Request = new Bundle.RequestComponent
                {
                    Method = hasVerb ? httpVerb : null,
                    Url = hasVerb ? $"{r.Resource.ResourceTypeName}/{(httpVerb == Bundle.HTTPVerb.POST ? null : r.Resource.ResourceId)}" : null,
                };

                string statusString;
                switch (httpVerb)
                {
                case Bundle.HTTPVerb.POST:
                    statusString = ((int)HttpStatusCode.Created).ToString() + " " + HttpStatusCode.Created;
                    break;

                case Bundle.HTTPVerb.PUT:
                case Bundle.HTTPVerb.GET:
                    statusString = ((int)HttpStatusCode.OK).ToString() + " " + HttpStatusCode.OK;
                    break;

                case Bundle.HTTPVerb.DELETE:
                    statusString = ((int)HttpStatusCode.NoContent).ToString() + " " + HttpStatusCode.NoContent;
                    break;

                default:
                    throw new NotImplementedException();
                }

                resource.Response = new Bundle.ResponseComponent
                {
                    Status = statusString,
                    LastModified = r.Resource.LastModified,
                    Etag = WeakETag.FromVersionId(r.Resource.Version).ToString(),
                };

                return resource;
            }));
        }
Exemplo n.º 3
0
        public ResourceElement CreateHistoryBundle(SearchResult result)
        {
            return(CreateBundle(result, Bundle.BundleType.History, r =>
            {
                var resource = new RawBundleEntryComponent(r.Resource);

                var hasVerb = Enum.TryParse(r.Resource.Request?.Method, true, out Bundle.HTTPVerb httpVerb);
#if Stu3
                // STU3 doesn't have PATCH verb, so let's map it to PUT.
                if (!hasVerb && string.Equals("PATCH", r.Resource.Request?.Method, StringComparison.OrdinalIgnoreCase))
                {
                    hasVerb = true;
                    httpVerb = Bundle.HTTPVerb.PUT;
                }
#endif
                resource.FullUrlElement = new FhirUri(_urlResolver.ResolveResourceWrapperUrl(r.Resource, true));
                if (hasVerb)
                {
                    resource.Request = new Bundle.RequestComponent
                    {
                        Method = httpVerb,
                        Url = $"{r.Resource.ResourceTypeName}/{(httpVerb == Bundle.HTTPVerb.POST ? null : r.Resource.ResourceId)}",
                    };

                    string ToStatusString(HttpStatusCode statusCode)
                    {
                        return $"{(int)statusCode} {statusCode}";
                    }

                    resource.Response = new Bundle.ResponseComponent
                    {
                        Status = ToStatusString(httpVerb switch
                        {
                            Bundle.HTTPVerb.POST => HttpStatusCode.Created,
                            Bundle.HTTPVerb.PUT when string.Equals(r.Resource.Version, "1", StringComparison.Ordinal) => HttpStatusCode.Created,
                            Bundle.HTTPVerb.PUT => HttpStatusCode.OK,
                            Bundle.HTTPVerb.GET => HttpStatusCode.OK,
#if !Stu3
                            Bundle.HTTPVerb.PATCH => HttpStatusCode.OK,
                            Bundle.HTTPVerb.HEAD => HttpStatusCode.OK,
#endif
                            Bundle.HTTPVerb.DELETE => HttpStatusCode.NoContent,
                            _ => throw new NotImplementedException($"{httpVerb} was not defined."),
                        }),
Exemplo n.º 4
0
        public ResourceElement CreateHistoryBundle(SearchResult result)
        {
            return(CreateBundle(result, Bundle.BundleType.History, r =>
            {
                var resource = new RawBundleEntryComponent(r.Resource);
                var hasVerb = Enum.TryParse(r.Resource.Request?.Method, true, out Bundle.HTTPVerb httpVerb);

                resource.FullUrlElement = new FhirUri(_urlResolver.ResolveResourceWrapperUrl(r.Resource, true));
                resource.Request = new Bundle.RequestComponent
                {
                    Method = hasVerb ? httpVerb : null,
                    Url = hasVerb ? $"{r.Resource.ResourceTypeName}/{(httpVerb == Bundle.HTTPVerb.POST ? null : r.Resource.ResourceId)}" : null,
                };
                resource.Response = new Bundle.ResponseComponent
                {
                    LastModified = r.Resource.LastModified,
                    Etag = WeakETag.FromVersionId(r.Resource.Version).ToString(),
                };

                return resource;
            }));
        }