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; })); }
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; })); }
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."), }),
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; })); }