public IResourceServiceOutcome Base(string BaseRequestUri, HttpRequestMessage Request, Resource resource) { using (DbContextTransaction Transaction = IUnitOfWork.BeginTransaction()) { try { IRequestServiceRootValidate.Validate(BaseRequestUri); IRequestMeta RequestMeta = IRequestMetaFactory.CreateRequestMeta().Set(Request); IBundleTransactionOperation BundleTransactionOperation = IBundleTransactionOperationFactory.CreateBundleTransactionOperation(); IResourceServiceOutcome ResourceServiceOutcome = BundleTransactionOperation.Transact(resource, RequestMeta); ResourceServiceOutcome.SummaryType = RequestMeta.SearchParameterGeneric.SummaryType; if (ResourceServiceOutcome.SuccessfulTransaction) { Transaction.Commit(); } else { Transaction.Rollback(); } return(ResourceServiceOutcome); } catch (Exception Exec) { Transaction.Rollback(); ILog.Error(Exec, $"PyroService.Base, Request: {Request.RequestUri.OriginalString}"); throw new PyroException(System.Net.HttpStatusCode.InternalServerError, Common.Tools.FhirOperationOutcomeSupport.Create(OperationOutcome.IssueSeverity.Error, OperationOutcome.IssueType.Exception, Exec.Message), Exec.Message); } } }
private bool CommitTransactionBundle(Bundle Bundle, string FileName) { try { var RequestMeta = IRequestMetaFactory.CreateRequestMeta().Set($""); IBundleTransactionOperation BundleTransactionOperation = IBundleTransactionOperationFactory.CreateBundleTransactionOperation(); this.IResourceTriggerService.TriggersActive = false; IResourceServiceOutcome ResourceServiceOutcome = BundleTransactionOperation.Transact(Bundle, RequestMeta); this.IResourceTriggerService.TriggersActive = true; if (ResourceServiceOutcome.SuccessfulTransaction) { return(true); } else { string OperationOutcomeMessage = string.Empty; if (ResourceServiceOutcome.ResourceResult != null && ResourceServiceOutcome.ResourceResult is OperationOutcome OptOut) { OptOut.Issue.ForEach(x => OperationOutcomeMessage = OperationOutcomeMessage + " " + x.Details); } ILog.Error($"Internal Server Error: Transaction bundle from the FHIR specification zip file named: {_ZipFileName}, file '{FileName} did not commit in a single transaction. " + $"The POST bundle transaction reported: HTTP Status: {ResourceServiceOutcome.HttpStatusCode} and the detail: {OperationOutcomeMessage}"); return(false); } } catch (Exception Exec) { ILog.Error(Exec, $"Internal Server Error: Could not commit the transaction bundle from the FHIR specification zip file named: {_ZipFileName}, file '{FileName}."); return(false); } }
public ServerInitializeOperationService( IRepositorySwitcher IRepositorySwitcher, IResourceServiceOutcomeFactory IResourceServiceOutcomeFactory, IResourceServices IResourceServices, IRequestMetaFactory IRequestMetaFactory, IGlobalProperties IGlobalProperties, IBundleTransactionOperation IBundleTransactionOperation) { this.IRepositorySwitcher = IRepositorySwitcher; this.IResourceServiceOutcomeFactory = IResourceServiceOutcomeFactory; this.IResourceServices = IResourceServices; this.IRequestMetaFactory = IRequestMetaFactory; this.IGlobalProperties = IGlobalProperties; this.IBundleTransactionOperation = IBundleTransactionOperation; }
public ServerInitializeOperationService( IRepositorySwitcher IRepositorySwitcher, IResourceServiceOutcomeFactory IResourceServiceOutcomeFactory, IResourceServices IResourceServices, IRequestMetaFactory IRequestMetaFactory, IGlobalProperties IGlobalProperties, IBundleTransactionOperation IBundleTransactionOperation, PyroHealthFhirResource.CodeSystems.IPyroFhirServer IPyroFhirServerCodeSystem) { this.IRepositorySwitcher = IRepositorySwitcher; this.IResourceServiceOutcomeFactory = IResourceServiceOutcomeFactory; this.IResourceServices = IResourceServices; this.IRequestMetaFactory = IRequestMetaFactory; this.IGlobalProperties = IGlobalProperties; this.IBundleTransactionOperation = IBundleTransactionOperation; this.IPyroFhirServerCodeSystem = IPyroFhirServerCodeSystem; }