From 60fdd25a65b3ee5e55fb85b92f115dcf37bfc7d6 Mon Sep 17 00:00:00 2001 From: Salaton Date: Fri, 27 Jan 2023 12:38:53 +0300 Subject: [PATCH] refactor: combine clinical and fhir usecase --- Dockerfile | 3 - go.mod | 1 - go.sum | 4 - .../infrastructure/datastore/fhir/fhir.go | 58 +-- pkg/clinical/infrastructure/infrastructure.go | 6 +- .../infrastructure/services/pubsub/service.go | 26 +- .../services/pubsub/service_test.go | 1 - .../services/pubsub/subscriber.go | 26 +- pkg/clinical/presentation/config.go | 4 +- .../presentation/interactor/interactor.go | 5 - pkg/clinical/presentation/rest/handlers.go | 8 +- pkg/clinical/repository/repository.go | 62 +++ .../usecases/{fhir => clinical}/fhir.go | 233 +++++---- .../{fhir => clinical}/fhir_unit_test.go | 42 +- .../{fhir => clinical}/mock/fhir_mock.go | 0 pkg/clinical/usecases/clinical/patient.go | 6 +- pkg/clinical/usecases/config_test.go | 4 +- pkg/clinical/usecases/mock/fhr_mock.go | 445 ------------------ pkg/clinical/usecases/mock/patient_mock.go | 242 ---------- .../{mock/ocl_mock.go => ocl/mock/mock.go} | 0 pkg/clinical/usecases/usecases.go | 4 - 21 files changed, 232 insertions(+), 948 deletions(-) rename pkg/clinical/usecases/{fhir => clinical}/fhir.go (59%) rename pkg/clinical/usecases/{fhir => clinical}/fhir_unit_test.go (96%) rename pkg/clinical/usecases/{fhir => clinical}/mock/fhir_mock.go (100%) delete mode 100644 pkg/clinical/usecases/mock/fhr_mock.go delete mode 100644 pkg/clinical/usecases/mock/patient_mock.go rename pkg/clinical/usecases/{mock/ocl_mock.go => ocl/mock/mock.go} (100%) diff --git a/Dockerfile b/Dockerfile index deed1e89..267a684a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,8 +30,5 @@ RUN apk add --no-cache ca-certificates COPY --from=builder /app/server /server COPY --from=builder /app/deps.yaml /deps.yaml -COPY --from=builder /app/pkg/clinical/application/authorization/rbac_model.conf /app/pkg/clinical/application/authorization/rbac_model.conf -COPY --from=builder /app/pkg/clinical/application/authorization/data/rbac_policy.csv /app/pkg/clinical/application/authorization/data/rbac_policy.csv - # Run the web service on container startup. CMD ["/server"] diff --git a/go.mod b/go.mod index bc69aaea..aebe0678 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,6 @@ require ( github.com/ahmetb/go-linq/v3 v3.2.0 github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d github.com/brianvoe/gofakeit v3.18.0+incompatible - github.com/casbin/casbin/v2 v2.44.3 github.com/getsentry/sentry-go v0.13.0 github.com/google/uuid v1.3.0 github.com/gorilla/handlers v1.5.1 diff --git a/go.sum b/go.sum index 5128b9e7..7d6004cb 100644 --- a/go.sum +++ b/go.sum @@ -93,8 +93,6 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= @@ -117,8 +115,6 @@ github.com/aws/aws-sdk-go v1.37.0/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zK github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/brianvoe/gofakeit v3.18.0+incompatible h1:wDOmHc9DLG4nRjUVVaxA+CEglKOW72Y5+4WNxUIkjM8= github.com/brianvoe/gofakeit v3.18.0+incompatible/go.mod h1:kfwdRA90vvNhPutZWfH7WPaDzUjz+CZFqG+rPkOjGOc= -github.com/casbin/casbin/v2 v2.44.3 h1:tPP1YypfG2fqe7S2zivYuD11yc+/mc0GXJe/sDVbb1U= -github.com/casbin/casbin/v2 v2.44.3/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0 h1:t/LhUZLVitR1Ow2YOnduCsavhwFUklBMoGVYUCqmCqk= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= diff --git a/pkg/clinical/infrastructure/datastore/fhir/fhir.go b/pkg/clinical/infrastructure/datastore/fhir/fhir.go index fe160dab..c581f89f 100644 --- a/pkg/clinical/infrastructure/datastore/fhir/fhir.go +++ b/pkg/clinical/infrastructure/datastore/fhir/fhir.go @@ -13,6 +13,7 @@ import ( "github.com/savannahghi/clinical/pkg/clinical/application/utils" "github.com/savannahghi/clinical/pkg/clinical/domain" dataset "github.com/savannahghi/clinical/pkg/clinical/infrastructure/datastore/fhirdataset" + "github.com/savannahghi/clinical/pkg/clinical/repository" "github.com/savannahghi/converterandformatter" "github.com/savannahghi/scalarutils" ) @@ -23,61 +24,6 @@ const ( timeFormatStr = "2006-01-02T15:04:05+03:00" ) -// FHIR represents all the FHIR logic -type FHIR interface { - CreateEpisodeOfCare(ctx context.Context, episode domain.FHIREpisodeOfCare) (*domain.EpisodeOfCarePayload, error) - SearchFHIRCondition(ctx context.Context, params map[string]interface{}) (*domain.FHIRConditionRelayConnection, error) - CreateFHIRCondition(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) - CreateFHIROrganization(ctx context.Context, input domain.FHIROrganizationInput) (*domain.FHIROrganizationRelayPayload, error) - SearchFHIROrganization(ctx context.Context, params map[string]interface{}) (*domain.FHIROrganizationRelayConnection, error) - FindOrganizationByID(ctx context.Context, organisationID string) (*domain.FHIROrganizationRelayPayload, error) - SearchEpisodesByParam(ctx context.Context, searchParams url.Values) ([]*domain.FHIREpisodeOfCare, error) - HasOpenEpisode( - ctx context.Context, - patient domain.FHIRPatient, - ) (bool, error) - OpenEpisodes( - ctx context.Context, patientReference string) ([]*domain.FHIREpisodeOfCare, error) - CreateFHIREncounter(ctx context.Context, input domain.FHIREncounterInput) (*domain.FHIREncounterRelayPayload, error) - GetFHIREpisodeOfCare(ctx context.Context, id string) (*domain.FHIREpisodeOfCareRelayPayload, error) - Encounters(ctx context.Context, patientReference string, status *domain.EncounterStatusEnum) ([]*domain.FHIREncounter, error) - SearchFHIREpisodeOfCare(ctx context.Context, params map[string]interface{}) (*domain.FHIREpisodeOfCareRelayConnection, error) - StartEncounter(ctx context.Context, episodeID string) (string, error) - SearchEpisodeEncounter( - ctx context.Context, - episodeReference string, - ) (*domain.FHIREncounterRelayConnection, error) - EndEncounter(ctx context.Context, encounterID string) (bool, error) - EndEpisode(ctx context.Context, episodeID string) (bool, error) - GetActiveEpisode(ctx context.Context, episodeID string) (*domain.FHIREpisodeOfCare, error) - SearchFHIRServiceRequest(ctx context.Context, params map[string]interface{}) (*domain.FHIRServiceRequestRelayConnection, error) - CreateFHIRServiceRequest(ctx context.Context, input domain.FHIRServiceRequestInput) (*domain.FHIRServiceRequestRelayPayload, error) - SearchFHIRAllergyIntolerance(ctx context.Context, params map[string]interface{}) (*domain.FHIRAllergyIntoleranceRelayConnection, error) - CreateFHIRAllergyIntolerance(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) - UpdateFHIRAllergyIntolerance(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) - SearchFHIRComposition(ctx context.Context, params map[string]interface{}) (*domain.FHIRCompositionRelayConnection, error) - CreateFHIRComposition(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) - UpdateFHIRComposition(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) - DeleteFHIRComposition(ctx context.Context, id string) (bool, error) - UpdateFHIRCondition(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) - GetFHIREncounter(ctx context.Context, id string) (*domain.FHIREncounterRelayPayload, error) - SearchFHIREncounter(ctx context.Context, params map[string]interface{}) (*domain.FHIREncounterRelayConnection, error) - SearchFHIRMedicationRequest(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationRequestRelayConnection, error) - CreateFHIRMedicationRequest(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) - UpdateFHIRMedicationRequest(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) - DeleteFHIRMedicationRequest(ctx context.Context, id string) (bool, error) - SearchFHIRObservation(ctx context.Context, params map[string]interface{}) (*domain.FHIRObservationRelayConnection, error) - CreateFHIRObservation(ctx context.Context, input domain.FHIRObservationInput) (*domain.FHIRObservationRelayPayload, error) - DeleteFHIRObservation(ctx context.Context, id string) (bool, error) - GetFHIRPatient(ctx context.Context, id string) (*domain.FHIRPatientRelayPayload, error) - DeleteFHIRPatient(ctx context.Context, id string) (bool, error) - DeleteFHIRServiceRequest(ctx context.Context, id string) (bool, error) - DeleteFHIRResourceType(results []map[string]string) error - CreateFHIRMedicationStatement(ctx context.Context, input domain.FHIRMedicationStatementInput) (*domain.FHIRMedicationStatementRelayPayload, error) - CreateFHIRMedication(ctx context.Context, input domain.FHIRMedicationInput) (*domain.FHIRMedicationRelayPayload, error) - SearchFHIRMedicationStatement(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationStatementRelayConnection, error) -} - // StoreImpl represents the FHIR infrastructure implementation type StoreImpl struct { Dataset dataset.FHIRRepository @@ -86,7 +32,7 @@ type StoreImpl struct { // NewFHIRStoreImpl initializes the new FHIR implementation func NewFHIRStoreImpl( dataset dataset.FHIRRepository, -) FHIR { +) repository.FHIR { return &StoreImpl{ Dataset: dataset, } diff --git a/pkg/clinical/infrastructure/infrastructure.go b/pkg/clinical/infrastructure/infrastructure.go index 52cdcb7f..82c683ef 100644 --- a/pkg/clinical/infrastructure/infrastructure.go +++ b/pkg/clinical/infrastructure/infrastructure.go @@ -3,16 +3,16 @@ package infrastructure import ( "github.com/savannahghi/clinical/pkg/clinical/application/common" "github.com/savannahghi/clinical/pkg/clinical/application/extensions" - fhir "github.com/savannahghi/clinical/pkg/clinical/infrastructure/datastore/fhir" dataset "github.com/savannahghi/clinical/pkg/clinical/infrastructure/datastore/fhirdataset" "github.com/savannahghi/clinical/pkg/clinical/infrastructure/services/mycarehub" "github.com/savannahghi/clinical/pkg/clinical/infrastructure/services/openconceptlab" + "github.com/savannahghi/clinical/pkg/clinical/repository" ) // Infrastructure ... type Infrastructure struct { FHIRRepo dataset.FHIRRepository - FHIR fhir.FHIR + FHIR repository.FHIR OpenConceptLab openconceptlab.ServiceOCL BaseExtension extensions.BaseExtension MyCareHub mycarehub.IServiceMyCareHub @@ -22,7 +22,7 @@ type Infrastructure struct { func NewInfrastructureInteractor( ext extensions.BaseExtension, fhirRepository dataset.FHIRRepository, - fhir fhir.FHIR, + fhir repository.FHIR, openconceptlab openconceptlab.ServiceOCL, ) Infrastructure { myCareHubClient := common.NewInterServiceClient("mycarehub", ext) diff --git a/pkg/clinical/infrastructure/services/pubsub/service.go b/pkg/clinical/infrastructure/services/pubsub/service.go index 89956e34..e75eced5 100644 --- a/pkg/clinical/infrastructure/services/pubsub/service.go +++ b/pkg/clinical/infrastructure/services/pubsub/service.go @@ -10,7 +10,6 @@ import ( "github.com/savannahghi/clinical/pkg/clinical/application/extensions" "github.com/savannahghi/clinical/pkg/clinical/infrastructure" "github.com/savannahghi/clinical/pkg/clinical/usecases/clinical" - fhirUsecase "github.com/savannahghi/clinical/pkg/clinical/usecases/fhir" "github.com/savannahghi/clinical/pkg/clinical/usecases/ocl" "github.com/savannahghi/serverutils" ) @@ -57,12 +56,11 @@ type ServicePubsub interface { // ServicePubSubMessaging is used to send and receive pubsub notifications type ServicePubSubMessaging struct { - client *pubsub.Client - baseExt extensions.BaseExtension - infra infrastructure.Infrastructure - patient clinical.UseCasesClinical - fhir fhirUsecase.UseCasesFHIR - ocl ocl.UseCasesOCL + client *pubsub.Client + baseExt extensions.BaseExtension + infra infrastructure.Infrastructure + clinical clinical.UseCasesClinical + ocl ocl.UseCasesOCL } // NewServicePubSubMessaging returns a new instance of pubsub @@ -70,17 +68,15 @@ func NewServicePubSubMessaging( client *pubsub.Client, baseExt extensions.BaseExtension, infra infrastructure.Infrastructure, - patient clinical.UseCasesClinical, - fhir fhirUsecase.UseCasesFHIR, + clinical clinical.UseCasesClinical, ocl ocl.UseCasesOCL, ) (*ServicePubSubMessaging, error) { s := &ServicePubSubMessaging{ - client: client, - baseExt: baseExt, - infra: infra, - patient: patient, - fhir: fhir, - ocl: ocl, + client: client, + baseExt: baseExt, + infra: infra, + clinical: clinical, + ocl: ocl, } ctx := context.Background() diff --git a/pkg/clinical/infrastructure/services/pubsub/service_test.go b/pkg/clinical/infrastructure/services/pubsub/service_test.go index 3f312b94..571dee8c 100644 --- a/pkg/clinical/infrastructure/services/pubsub/service_test.go +++ b/pkg/clinical/infrastructure/services/pubsub/service_test.go @@ -49,7 +49,6 @@ func InitializeTestPubSub(t *testing.T) (*pubsubmessaging.ServicePubSubMessaging baseExtension, infrastructure, usecases, - usecases, oclUseCase, ) if err != nil { diff --git a/pkg/clinical/infrastructure/services/pubsub/subscriber.go b/pkg/clinical/infrastructure/services/pubsub/subscriber.go index 242d59d4..dbe0caaa 100644 --- a/pkg/clinical/infrastructure/services/pubsub/subscriber.go +++ b/pkg/clinical/infrastructure/services/pubsub/subscriber.go @@ -84,7 +84,7 @@ func (ps ServicePubSubMessaging) ReceivePubSubPushMessages( Active: profile.Active, } - patient, err := ps.patient.RegisterPatient(ctx, payload) + patient, err := ps.clinical.RegisterPatient(ctx, payload) if err != nil { serverutils.WriteJSONResponse(w, errorcodeutil.CustomError{ Err: err, @@ -131,7 +131,7 @@ func (ps ServicePubSubMessaging) ReceivePubSubPushMessages( }, } - response, err := ps.fhir.CreateFHIROrganization(ctx, input) + response, err := ps.clinical.CreateFHIROrganization(ctx, input) if err != nil { serverutils.WriteJSONResponse(w, errorcodeutil.CustomError{ Err: err, @@ -168,7 +168,7 @@ func (ps ServicePubSubMessaging) ReceivePubSubPushMessages( return } - _, err = ps.fhir.CreateFHIRObservation(ctx, *input) + _, err = ps.clinical.CreateFHIRObservation(ctx, *input) if err != nil { serverutils.WriteJSONResponse(w, errorcodeutil.CustomError{ Err: err, @@ -197,7 +197,7 @@ func (ps ServicePubSubMessaging) ReceivePubSubPushMessages( return } - _, err = ps.fhir.CreateFHIRAllergyIntolerance(ctx, *input) + _, err = ps.clinical.CreateFHIRAllergyIntolerance(ctx, *input) if err != nil { serverutils.WriteJSONResponse(w, errorcodeutil.CustomError{ Err: err, @@ -226,7 +226,7 @@ func (ps ServicePubSubMessaging) ReceivePubSubPushMessages( return } - _, err = ps.fhir.CreateFHIRMedicationStatement(ctx, *input) + _, err = ps.clinical.CreateFHIRMedicationStatement(ctx, *input) if err != nil { serverutils.WriteJSONResponse(w, errorcodeutil.CustomError{ Err: err, @@ -255,7 +255,7 @@ func (ps ServicePubSubMessaging) ReceivePubSubPushMessages( return } - _, err = ps.fhir.CreateFHIRObservation(ctx, *input) + _, err = ps.clinical.CreateFHIRObservation(ctx, *input) if err != nil { serverutils.WriteJSONResponse(w, errorcodeutil.CustomError{ Err: err, @@ -280,7 +280,7 @@ func (ps ServicePubSubMessaging) ReceivePubSubPushMessages( // ComposeTestResultInput composes a test result input from data received func (ps ServicePubSubMessaging) ComposeTestResultInput(ctx context.Context, input dto.CreatePatientTestResultPubSubMessage) (*domain.FHIRObservationInput, error) { var patientName string - patient, err := ps.patient.FindPatientByID(ctx, input.PatientID) + patient, err := ps.clinical.FindPatientByID(ctx, input.PatientID) if err != nil { return nil, err } @@ -329,7 +329,7 @@ func (ps ServicePubSubMessaging) ComposeTestResultInput(ctx context.Context, inp } if input.OrganizationID != "" { - organization, err := ps.fhir.FindOrganizationByID(ctx, input.OrganizationID) // rename organization response + organization, err := ps.clinical.FindOrganizationByID(ctx, input.OrganizationID) // rename organization response if err != nil { //Should not fail if the organization is not found log.Printf("the error is: %v", err) @@ -387,7 +387,7 @@ func (ps ServicePubSubMessaging) ComposeVitalsInput(ctx context.Context, input d ValueString: &input.Value, } - patient, err := ps.patient.FindPatientByID(ctx, input.PatientID) + patient, err := ps.clinical.FindPatientByID(ctx, input.PatientID) if err != nil { return nil, err } @@ -399,7 +399,7 @@ func (ps ServicePubSubMessaging) ComposeVitalsInput(ctx context.Context, input d } if input.OrganizationID != "" { - organization, err := ps.fhir.FindOrganizationByID(ctx, input.OrganizationID) + organization, err := ps.clinical.FindOrganizationByID(ctx, input.OrganizationID) if err != nil { //Should not fail if organization is not found log.Printf("the error is: %v", err) @@ -462,7 +462,7 @@ func (ps ServicePubSubMessaging) ComposeMedicationStatementInput(ctx context.Con }, } - patient, err := ps.patient.FindPatientByID(ctx, input.PatientID) + patient, err := ps.clinical.FindPatientByID(ctx, input.PatientID) if err != nil { return nil, err } @@ -474,7 +474,7 @@ func (ps ServicePubSubMessaging) ComposeMedicationStatementInput(ctx context.Con } if input.OrganizationID != "" { - organization, err := ps.fhir.FindOrganizationByID(ctx, input.OrganizationID) // rename organization response + organization, err := ps.clinical.FindOrganizationByID(ctx, input.OrganizationID) // rename organization response if err != nil { log.Printf("the error is: %v", err) } @@ -530,7 +530,7 @@ func (ps ServicePubSubMessaging) ComposeAllergyIntoleranceInput(ctx context.Cont Day: day, } - patient, err := ps.patient.FindPatientByID(ctx, input.PatientID) + patient, err := ps.clinical.FindPatientByID(ctx, input.PatientID) if err != nil { return nil, err } diff --git a/pkg/clinical/presentation/config.go b/pkg/clinical/presentation/config.go index e5260a25..c159b715 100644 --- a/pkg/clinical/presentation/config.go +++ b/pkg/clinical/presentation/config.go @@ -122,9 +122,9 @@ func Router(ctx context.Context) (*mux.Router, error) { infrastructure := infrastructure.NewInfrastructureInteractor(baseExtension, repo, fhir, ocl) usecases := usecases.NewUsecasesInteractor(infrastructure) - h := rest.NewPresentationHandlers(infrastructure, usecases) + h := rest.NewPresentationHandlers(usecases) - pubSub, err := pubsubmessaging.NewServicePubSubMessaging(pubSubClient, baseExtension, infrastructure, usecases, usecases, ocl) + pubSub, err := pubsubmessaging.NewServicePubSubMessaging(pubSubClient, baseExtension, infrastructure, usecases, ocl) if err != nil { return nil, fmt.Errorf("failed to initialize pubsub messaging service: %v", err) } diff --git a/pkg/clinical/presentation/interactor/interactor.go b/pkg/clinical/presentation/interactor/interactor.go index abfbb1f2..3df81fed 100644 --- a/pkg/clinical/presentation/interactor/interactor.go +++ b/pkg/clinical/presentation/interactor/interactor.go @@ -3,21 +3,18 @@ package interactor import ( "github.com/savannahghi/clinical/pkg/clinical/infrastructure" "github.com/savannahghi/clinical/pkg/clinical/usecases/clinical" - fhir "github.com/savannahghi/clinical/pkg/clinical/usecases/fhir" "github.com/savannahghi/clinical/pkg/clinical/usecases/ocl" ) // Usecases is an interface that combines of all usescases type Usecases interface { clinical.UseCasesClinical - fhir.UseCasesFHIR ocl.UseCasesOCL } // Interactor is an implementation of the usecases interface type Interactor struct { clinical.UseCasesClinical - fhir.UseCasesFHIR infrastructure.Infrastructure ocl.UseCasesOCL } @@ -27,12 +24,10 @@ func NewUsecasesInteractor( infrastructure infrastructure.Infrastructure, ) Usecases { clinical := clinical.NewUseCasesClinicalImpl(infrastructure) - fhir := fhir.NewUseCasesFHIRImpl(infrastructure) ocl := ocl.NewUseCasesOCLImpl(infrastructure) impl := &Interactor{ clinical, - fhir, infrastructure, ocl, } diff --git a/pkg/clinical/presentation/rest/handlers.go b/pkg/clinical/presentation/rest/handlers.go index 8b65a50c..b3138108 100644 --- a/pkg/clinical/presentation/rest/handlers.go +++ b/pkg/clinical/presentation/rest/handlers.go @@ -6,7 +6,6 @@ import ( "github.com/savannahghi/clinical/pkg/clinical/application/utils" "github.com/savannahghi/clinical/pkg/clinical/domain" - "github.com/savannahghi/clinical/pkg/clinical/infrastructure" "github.com/savannahghi/clinical/pkg/clinical/usecases" "github.com/savannahghi/serverutils" ) @@ -18,13 +17,12 @@ type PresentationHandlers interface { // PresentationHandlersImpl represents the usecase implementation object type PresentationHandlersImpl struct { - usecases usecases.Interactor - infrastructure infrastructure.Infrastructure + usecases usecases.Interactor } // NewPresentationHandlers initializes a new rest handlers usecase -func NewPresentationHandlers(infrastructure infrastructure.Infrastructure, usecases usecases.Interactor) PresentationHandlers { - return &PresentationHandlersImpl{infrastructure: infrastructure, usecases: usecases} +func NewPresentationHandlers(usecases usecases.Interactor) PresentationHandlers { + return &PresentationHandlersImpl{usecases: usecases} } // DeleteFHIRPatientByPhone handler exposes an endpoint that takes a diff --git a/pkg/clinical/repository/repository.go b/pkg/clinical/repository/repository.go index 50a4378d..1a0c91a0 100644 --- a/pkg/clinical/repository/repository.go +++ b/pkg/clinical/repository/repository.go @@ -1 +1,63 @@ package repository + +import ( + "context" + "net/url" + + "github.com/savannahghi/clinical/pkg/clinical/domain" +) + +// FHIR represents all the FHIR logic +type FHIR interface { + CreateEpisodeOfCare(ctx context.Context, episode domain.FHIREpisodeOfCare) (*domain.EpisodeOfCarePayload, error) + SearchFHIRCondition(ctx context.Context, params map[string]interface{}) (*domain.FHIRConditionRelayConnection, error) + CreateFHIRCondition(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) + CreateFHIROrganization(ctx context.Context, input domain.FHIROrganizationInput) (*domain.FHIROrganizationRelayPayload, error) + SearchFHIROrganization(ctx context.Context, params map[string]interface{}) (*domain.FHIROrganizationRelayConnection, error) + FindOrganizationByID(ctx context.Context, organisationID string) (*domain.FHIROrganizationRelayPayload, error) + SearchEpisodesByParam(ctx context.Context, searchParams url.Values) ([]*domain.FHIREpisodeOfCare, error) + HasOpenEpisode( + ctx context.Context, + patient domain.FHIRPatient, + ) (bool, error) + OpenEpisodes( + ctx context.Context, patientReference string) ([]*domain.FHIREpisodeOfCare, error) + CreateFHIREncounter(ctx context.Context, input domain.FHIREncounterInput) (*domain.FHIREncounterRelayPayload, error) + GetFHIREpisodeOfCare(ctx context.Context, id string) (*domain.FHIREpisodeOfCareRelayPayload, error) + Encounters(ctx context.Context, patientReference string, status *domain.EncounterStatusEnum) ([]*domain.FHIREncounter, error) + SearchFHIREpisodeOfCare(ctx context.Context, params map[string]interface{}) (*domain.FHIREpisodeOfCareRelayConnection, error) + StartEncounter(ctx context.Context, episodeID string) (string, error) + SearchEpisodeEncounter( + ctx context.Context, + episodeReference string, + ) (*domain.FHIREncounterRelayConnection, error) + EndEncounter(ctx context.Context, encounterID string) (bool, error) + EndEpisode(ctx context.Context, episodeID string) (bool, error) + GetActiveEpisode(ctx context.Context, episodeID string) (*domain.FHIREpisodeOfCare, error) + SearchFHIRServiceRequest(ctx context.Context, params map[string]interface{}) (*domain.FHIRServiceRequestRelayConnection, error) + CreateFHIRServiceRequest(ctx context.Context, input domain.FHIRServiceRequestInput) (*domain.FHIRServiceRequestRelayPayload, error) + SearchFHIRAllergyIntolerance(ctx context.Context, params map[string]interface{}) (*domain.FHIRAllergyIntoleranceRelayConnection, error) + CreateFHIRAllergyIntolerance(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) + UpdateFHIRAllergyIntolerance(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) + SearchFHIRComposition(ctx context.Context, params map[string]interface{}) (*domain.FHIRCompositionRelayConnection, error) + CreateFHIRComposition(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) + UpdateFHIRComposition(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) + DeleteFHIRComposition(ctx context.Context, id string) (bool, error) + UpdateFHIRCondition(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) + GetFHIREncounter(ctx context.Context, id string) (*domain.FHIREncounterRelayPayload, error) + SearchFHIREncounter(ctx context.Context, params map[string]interface{}) (*domain.FHIREncounterRelayConnection, error) + SearchFHIRMedicationRequest(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationRequestRelayConnection, error) + CreateFHIRMedicationRequest(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) + UpdateFHIRMedicationRequest(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) + DeleteFHIRMedicationRequest(ctx context.Context, id string) (bool, error) + SearchFHIRObservation(ctx context.Context, params map[string]interface{}) (*domain.FHIRObservationRelayConnection, error) + CreateFHIRObservation(ctx context.Context, input domain.FHIRObservationInput) (*domain.FHIRObservationRelayPayload, error) + DeleteFHIRObservation(ctx context.Context, id string) (bool, error) + GetFHIRPatient(ctx context.Context, id string) (*domain.FHIRPatientRelayPayload, error) + DeleteFHIRPatient(ctx context.Context, id string) (bool, error) + DeleteFHIRServiceRequest(ctx context.Context, id string) (bool, error) + DeleteFHIRResourceType(results []map[string]string) error + CreateFHIRMedicationStatement(ctx context.Context, input domain.FHIRMedicationStatementInput) (*domain.FHIRMedicationStatementRelayPayload, error) + CreateFHIRMedication(ctx context.Context, input domain.FHIRMedicationInput) (*domain.FHIRMedicationRelayPayload, error) + SearchFHIRMedicationStatement(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationStatementRelayConnection, error) +} diff --git a/pkg/clinical/usecases/fhir/fhir.go b/pkg/clinical/usecases/clinical/fhir.go similarity index 59% rename from pkg/clinical/usecases/fhir/fhir.go rename to pkg/clinical/usecases/clinical/fhir.go index 8c056bbe..3e26614b 100644 --- a/pkg/clinical/usecases/fhir/fhir.go +++ b/pkg/clinical/usecases/clinical/fhir.go @@ -1,4 +1,4 @@ -package fhir +package clinical import ( "context" @@ -10,7 +10,6 @@ import ( "github.com/savannahghi/clinical/pkg/clinical/application/common/helpers" "github.com/savannahghi/clinical/pkg/clinical/application/utils" "github.com/savannahghi/clinical/pkg/clinical/domain" - "github.com/savannahghi/clinical/pkg/clinical/infrastructure" "github.com/savannahghi/converterandformatter" ) @@ -82,58 +81,46 @@ type UseCasesFHIR interface { SearchFHIRMedicationStatement(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationStatementRelayConnection, error) } -// UseCasesFHIRImpl represents the FHIR usecase implementation -type UseCasesFHIRImpl struct { - infrastructure infrastructure.Infrastructure -} - -// NewUseCasesFHIRImpl initializes the new FHIR implementation -func NewUseCasesFHIRImpl(infra infrastructure.Infrastructure) UseCasesFHIR { - return &UseCasesFHIRImpl{ - infrastructure: infra, - } -} - // Encounters returns encounters that belong to the indicated patient. // // The patientReference should be a [string] in the format "Patient/". -func (fh UseCasesFHIRImpl) Encounters( +func (c *UseCasesClinicalImpl) Encounters( ctx context.Context, patientReference string, status *domain.EncounterStatusEnum, ) ([]*domain.FHIREncounter, error) { - return fh.infrastructure.FHIR.Encounters(ctx, patientReference, status) + return c.infrastructure.FHIR.Encounters(ctx, patientReference, status) } // SearchFHIREpisodeOfCare provides a search API for FHIREpisodeOfCare -func (fh UseCasesFHIRImpl) SearchFHIREpisodeOfCare(ctx context.Context, params map[string]interface{}) (*domain.FHIREpisodeOfCareRelayConnection, error) { +func (c *UseCasesClinicalImpl) SearchFHIREpisodeOfCare(ctx context.Context, params map[string]interface{}) (*domain.FHIREpisodeOfCareRelayConnection, error) { if params == nil { return nil, fmt.Errorf("can't search with nil params") } - return fh.infrastructure.FHIR.SearchFHIREpisodeOfCare(ctx, params) + return c.infrastructure.FHIR.SearchFHIREpisodeOfCare(ctx, params) } //CreateEpisodeOfCare is the final common pathway for creation of episodes of care. -func (fh UseCasesFHIRImpl) CreateEpisodeOfCare(ctx context.Context, episode domain.FHIREpisodeOfCare) (*domain.EpisodeOfCarePayload, error) { - return fh.infrastructure.FHIR.CreateEpisodeOfCare(ctx, episode) +func (c *UseCasesClinicalImpl) CreateEpisodeOfCare(ctx context.Context, episode domain.FHIREpisodeOfCare) (*domain.EpisodeOfCarePayload, error) { + return c.infrastructure.FHIR.CreateEpisodeOfCare(ctx, episode) } // CreateFHIRCondition creates a FHIRCondition instance -func (fh UseCasesFHIRImpl) CreateFHIRCondition(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) { - return fh.infrastructure.FHIR.CreateFHIRCondition(ctx, input) +func (c *UseCasesClinicalImpl) CreateFHIRCondition(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) { + return c.infrastructure.FHIR.CreateFHIRCondition(ctx, input) } // CreateFHIROrganization creates a FHIROrganization instance -func (fh UseCasesFHIRImpl) CreateFHIROrganization(ctx context.Context, input domain.FHIROrganizationInput) (*domain.FHIROrganizationRelayPayload, error) { - return fh.infrastructure.FHIR.CreateFHIROrganization(ctx, input) +func (c *UseCasesClinicalImpl) CreateFHIROrganization(ctx context.Context, input domain.FHIROrganizationInput) (*domain.FHIROrganizationRelayPayload, error) { + return c.infrastructure.FHIR.CreateFHIROrganization(ctx, input) } // OpenOrganizationEpisodes return all organization specific open episodes -func (fh UseCasesFHIRImpl) OpenOrganizationEpisodes( +func (c *UseCasesClinicalImpl) OpenOrganizationEpisodes( ctx context.Context, providerSladeCode string) ([]*domain.FHIREpisodeOfCare, error) { - organizationID, err := fh.GetORCreateOrganization(ctx, providerSladeCode) + organizationID, err := c.GetORCreateOrganization(ctx, providerSladeCode) if err != nil { utils.ReportErrorToSentry(err) return nil, fmt.Errorf( @@ -143,11 +130,11 @@ func (fh UseCasesFHIRImpl) OpenOrganizationEpisodes( searchParams := url.Values{} searchParams.Add("status", domain.EpisodeOfCareStatusEnumActive.String()) searchParams.Add("organization", organizationReference) - return fh.SearchEpisodesByParam(ctx, searchParams) + return c.SearchEpisodesByParam(ctx, searchParams) } // CreateOrganization creates an organization given ist provider code -func (fh UseCasesFHIRImpl) CreateOrganization(ctx context.Context, providerSladeCode string) (*string, error) { +func (c *UseCasesClinicalImpl) CreateOrganization(ctx context.Context, providerSladeCode string) (*string, error) { identifier := []*domain.FHIRIdentifierInput{ { @@ -159,7 +146,7 @@ func (fh UseCasesFHIRImpl) CreateOrganization(ctx context.Context, providerSlade Identifier: identifier, Name: &providerSladeCode, } - createdOrganization, err := fh.CreateFHIROrganization(ctx, organizationInput) + createdOrganization, err := c.CreateFHIROrganization(ctx, organizationInput) if err != nil { utils.ReportErrorToSentry(err) return nil, err @@ -169,32 +156,32 @@ func (fh UseCasesFHIRImpl) CreateOrganization(ctx context.Context, providerSlade } // SearchFHIROrganization provides a search API for FHIROrganization -func (fh UseCasesFHIRImpl) SearchFHIROrganization(ctx context.Context, params map[string]interface{}) (*domain.FHIROrganizationRelayConnection, error) { +func (c *UseCasesClinicalImpl) SearchFHIROrganization(ctx context.Context, params map[string]interface{}) (*domain.FHIROrganizationRelayConnection, error) { if params == nil { return nil, fmt.Errorf("can't search with nil params") } - return fh.infrastructure.FHIR.SearchFHIROrganization(ctx, params) + return c.infrastructure.FHIR.SearchFHIROrganization(ctx, params) } // FindOrganizationByID finds and retrieves organization details using the specified organization ID -func (fh UseCasesFHIRImpl) FindOrganizationByID(ctx context.Context, organizationID string) (*domain.FHIROrganizationRelayPayload, error) { +func (c *UseCasesClinicalImpl) FindOrganizationByID(ctx context.Context, organizationID string) (*domain.FHIROrganizationRelayPayload, error) { if organizationID == "" { return nil, fmt.Errorf("organization ID is required") } - return fh.infrastructure.FHIR.FindOrganizationByID(ctx, organizationID) + return c.infrastructure.FHIR.FindOrganizationByID(ctx, organizationID) } // GetORCreateOrganization retrieve an organisation via its code if not found create a new one. -func (fh UseCasesFHIRImpl) GetORCreateOrganization(ctx context.Context, providerSladeCode string) (*string, error) { - retrievedOrg, err := fh.GetOrganization(ctx, providerSladeCode) +func (c *UseCasesClinicalImpl) GetORCreateOrganization(ctx context.Context, providerSladeCode string) (*string, error) { + retrievedOrg, err := c.GetOrganization(ctx, providerSladeCode) if err != nil { utils.ReportErrorToSentry(err) return nil, fmt.Errorf( "internal server error in getting organisation : %v", err) } if retrievedOrg == nil { - createdOrg, err := fh.CreateOrganization(ctx, providerSladeCode) + createdOrg, err := c.CreateOrganization(ctx, providerSladeCode) if err != nil { utils.ReportErrorToSentry(err) return nil, fmt.Errorf( @@ -206,12 +193,12 @@ func (fh UseCasesFHIRImpl) GetORCreateOrganization(ctx context.Context, provider } // GetOrganization retrieves an organization given its code -func (fh UseCasesFHIRImpl) GetOrganization(ctx context.Context, providerSladeCode string) (*string, error) { +func (c *UseCasesClinicalImpl) GetOrganization(ctx context.Context, providerSladeCode string) (*string, error) { searchParam := map[string]interface{}{ "identifier": providerSladeCode, } - organization, err := fh.SearchFHIROrganization(ctx, searchParam) + organization, err := c.SearchFHIROrganization(ctx, searchParam) if err != nil { utils.ReportErrorToSentry(err) return nil, err @@ -224,8 +211,8 @@ func (fh UseCasesFHIRImpl) GetOrganization(ctx context.Context, providerSladeCod } // SearchEpisodesByParam search episodes by params -func (fh UseCasesFHIRImpl) SearchEpisodesByParam(ctx context.Context, searchParams url.Values) ([]*domain.FHIREpisodeOfCare, error) { - return fh.infrastructure.FHIR.SearchEpisodesByParam(ctx, searchParams) +func (c *UseCasesClinicalImpl) SearchEpisodesByParam(ctx context.Context, searchParams url.Values) ([]*domain.FHIREpisodeOfCare, error) { + return c.infrastructure.FHIR.SearchEpisodesByParam(ctx, searchParams) } // POSTRequest is used to manually compose POST requests to the FHIR service @@ -233,48 +220,48 @@ func (fh UseCasesFHIRImpl) SearchEpisodesByParam(ctx context.Context, searchPara // - `resourceName` is a FHIR resource name e.g "Patient" // - `path` is a sub-path e.g `_search` under a resource // - `params` should be query params, sent as `url.Values` -func (fh UseCasesFHIRImpl) POSTRequest(resourceName string, path string, params url.Values, body io.Reader) ([]byte, error) { - return fh.infrastructure.FHIRRepo.POSTRequest(resourceName, path, params, body) +func (c *UseCasesClinicalImpl) POSTRequest(resourceName string, path string, params url.Values, body io.Reader) ([]byte, error) { + return c.infrastructure.FHIRRepo.POSTRequest(resourceName, path, params, body) } // OpenEpisodes returns the IDs of a patient's open episodes -func (fh UseCasesFHIRImpl) OpenEpisodes( +func (c *UseCasesClinicalImpl) OpenEpisodes( ctx context.Context, patientReference string) ([]*domain.FHIREpisodeOfCare, error) { - return fh.infrastructure.FHIR.OpenEpisodes(ctx, patientReference) + return c.infrastructure.FHIR.OpenEpisodes(ctx, patientReference) } // HasOpenEpisode determines if a patient has an open episode -func (fh UseCasesFHIRImpl) HasOpenEpisode( +func (c *UseCasesClinicalImpl) HasOpenEpisode( ctx context.Context, patient domain.FHIRPatient, ) (bool, error) { - return fh.infrastructure.FHIR.HasOpenEpisode(ctx, patient) + return c.infrastructure.FHIR.HasOpenEpisode(ctx, patient) } // FHIRHeaders composes suitable FHIR headers, with authentication and content // type already set -func (fh UseCasesFHIRImpl) FHIRHeaders() (http.Header, error) { - return fh.infrastructure.FHIRRepo.FHIRHeaders() +func (c *UseCasesClinicalImpl) FHIRHeaders() (http.Header, error) { + return c.infrastructure.FHIRRepo.FHIRHeaders() } // CreateFHIREncounter creates a FHIREncounter instance -func (fh UseCasesFHIRImpl) CreateFHIREncounter(ctx context.Context, input domain.FHIREncounterInput) (*domain.FHIREncounterRelayPayload, error) { - return fh.infrastructure.FHIR.CreateFHIREncounter(ctx, input) +func (c *UseCasesClinicalImpl) CreateFHIREncounter(ctx context.Context, input domain.FHIREncounterInput) (*domain.FHIREncounterRelayPayload, error) { + return c.infrastructure.FHIR.CreateFHIREncounter(ctx, input) } // GetFHIREpisodeOfCare retrieves instances of FHIREpisodeOfCare by ID -func (fh UseCasesFHIRImpl) GetFHIREpisodeOfCare(ctx context.Context, id string) (*domain.FHIREpisodeOfCareRelayPayload, error) { - return fh.infrastructure.FHIR.GetFHIREpisodeOfCare(ctx, id) +func (c *UseCasesClinicalImpl) GetFHIREpisodeOfCare(ctx context.Context, id string) (*domain.FHIREpisodeOfCareRelayPayload, error) { + return c.infrastructure.FHIR.GetFHIREpisodeOfCare(ctx, id) } // StartEncounter starts an encounter within an episode of care -func (fh *UseCasesFHIRImpl) StartEncounter( +func (c *UseCasesClinicalImpl) StartEncounter( ctx context.Context, episodeID string) (string, error) { - return fh.infrastructure.FHIR.StartEncounter(ctx, episodeID) + return c.infrastructure.FHIR.StartEncounter(ctx, episodeID) } // StartEpisodeByOtp starts a patient OTP verified episode -func (fh *UseCasesFHIRImpl) StartEpisodeByOtp(ctx context.Context, input domain.OTPEpisodeCreationInput) (*domain.EpisodeOfCarePayload, error) { +func (c *UseCasesClinicalImpl) StartEpisodeByOtp(ctx context.Context, input domain.OTPEpisodeCreationInput) (*domain.EpisodeOfCarePayload, error) { normalized, err := converterandformatter.NormalizeMSISDN(input.Msisdn) if err != nil { @@ -282,7 +269,7 @@ func (fh *UseCasesFHIRImpl) StartEpisodeByOtp(ctx context.Context, input domain. return nil, fmt.Errorf("failed to normalize phone number: %w", err) } - organizationID, err := fh.GetORCreateOrganization(ctx, input.ProviderCode) + organizationID, err := c.GetORCreateOrganization(ctx, input.ProviderCode) if err != nil { utils.ReportErrorToSentry(err) return nil, fmt.Errorf( @@ -295,13 +282,13 @@ func (fh *UseCasesFHIRImpl) StartEpisodeByOtp(ctx context.Context, input domain. input.ProviderCode, input.PatientID, ) - return fh.CreateEpisodeOfCare(ctx, ep) + return c.CreateEpisodeOfCare(ctx, ep) } // UpgradeEpisode starts a patient OTP verified episode -func (fh *UseCasesFHIRImpl) UpgradeEpisode(ctx context.Context, input domain.OTPEpisodeUpgradeInput) (*domain.EpisodeOfCarePayload, error) { +func (c *UseCasesClinicalImpl) UpgradeEpisode(ctx context.Context, input domain.OTPEpisodeUpgradeInput) (*domain.EpisodeOfCarePayload, error) { // retrieve and validate the episode - episode, err := fh.GetActiveEpisode(ctx, input.EpisodeID) + episode, err := c.GetActiveEpisode(ctx, input.EpisodeID) if err != nil { utils.ReportErrorToSentry(err) return nil, fmt.Errorf("can't get active episode to upgrade: %w", err) @@ -320,7 +307,7 @@ func (fh *UseCasesFHIRImpl) UpgradeEpisode(ctx context.Context, input domain.OTP if episodeTypes[0] == nil { return nil, fmt.Errorf("system error: nil episode") } - encounters, err := fh.Encounters(ctx, *episode.Patient.Reference, nil) + encounters, err := c.Encounters(ctx, *episode.Patient.Reference, nil) if err != nil { utils.ReportErrorToSentry(err) return nil, fmt.Errorf( @@ -347,7 +334,7 @@ func (fh *UseCasesFHIRImpl) UpgradeEpisode(ctx context.Context, input domain.OTP return nil, fmt.Errorf("unable to turn episode of care input into a map: %v", err) } - _, err = fh.infrastructure.FHIRRepo.UpdateFHIRResource( + _, err = c.infrastructure.FHIRRepo.UpdateFHIRResource( "EpisodeOfCare", *episode.ID, payload) if err != nil { utils.ReportErrorToSentry(err) @@ -361,188 +348,188 @@ func (fh *UseCasesFHIRImpl) UpgradeEpisode(ctx context.Context, input domain.OTP } // SearchEpisodeEncounter returns all encounters in a visit -func (fh *UseCasesFHIRImpl) SearchEpisodeEncounter( +func (c *UseCasesClinicalImpl) SearchEpisodeEncounter( ctx context.Context, episodeReference string, ) (*domain.FHIREncounterRelayConnection, error) { - return fh.infrastructure.FHIR.SearchEpisodeEncounter(ctx, episodeReference) + return c.infrastructure.FHIR.SearchEpisodeEncounter(ctx, episodeReference) } // EndEncounter ends an encounter -func (fh *UseCasesFHIRImpl) EndEncounter(ctx context.Context, encounterID string) (bool, error) { - return fh.infrastructure.FHIR.EndEncounter(ctx, encounterID) +func (c *UseCasesClinicalImpl) EndEncounter(ctx context.Context, encounterID string) (bool, error) { + return c.infrastructure.FHIR.EndEncounter(ctx, encounterID) } // EndEpisode ends an episode of care by patching it's status to "finished" -func (fh *UseCasesFHIRImpl) EndEpisode(ctx context.Context, episodeID string) (bool, error) { - return fh.infrastructure.FHIR.EndEpisode(ctx, episodeID) +func (c *UseCasesClinicalImpl) EndEpisode(ctx context.Context, episodeID string) (bool, error) { + return c.infrastructure.FHIR.EndEpisode(ctx, episodeID) } // GetActiveEpisode returns any ACTIVE episode that has to the indicated ID -func (fh *UseCasesFHIRImpl) GetActiveEpisode(ctx context.Context, episodeID string) (*domain.FHIREpisodeOfCare, error) { - return fh.infrastructure.FHIR.GetActiveEpisode(ctx, episodeID) +func (c *UseCasesClinicalImpl) GetActiveEpisode(ctx context.Context, episodeID string) (*domain.FHIREpisodeOfCare, error) { + return c.infrastructure.FHIR.GetActiveEpisode(ctx, episodeID) } // SearchFHIRServiceRequest provides a search API for FHIRServiceRequest -func (fh *UseCasesFHIRImpl) SearchFHIRServiceRequest(ctx context.Context, params map[string]interface{}) (*domain.FHIRServiceRequestRelayConnection, error) { +func (c *UseCasesClinicalImpl) SearchFHIRServiceRequest(ctx context.Context, params map[string]interface{}) (*domain.FHIRServiceRequestRelayConnection, error) { if params == nil { return nil, fmt.Errorf("can't search with nil params") } - return fh.infrastructure.FHIR.SearchFHIRServiceRequest(ctx, params) + return c.infrastructure.FHIR.SearchFHIRServiceRequest(ctx, params) } // CreateFHIRServiceRequest creates a FHIRServiceRequest instance -func (fh *UseCasesFHIRImpl) CreateFHIRServiceRequest(ctx context.Context, input domain.FHIRServiceRequestInput) (*domain.FHIRServiceRequestRelayPayload, error) { - return fh.infrastructure.FHIR.CreateFHIRServiceRequest(ctx, input) +func (c *UseCasesClinicalImpl) CreateFHIRServiceRequest(ctx context.Context, input domain.FHIRServiceRequestInput) (*domain.FHIRServiceRequestRelayPayload, error) { + return c.infrastructure.FHIR.CreateFHIRServiceRequest(ctx, input) } // SearchFHIRAllergyIntolerance provides a search API for FHIRAllergyIntolerance -func (fh *UseCasesFHIRImpl) SearchFHIRAllergyIntolerance(ctx context.Context, params map[string]interface{}) (*domain.FHIRAllergyIntoleranceRelayConnection, error) { - return fh.infrastructure.FHIR.SearchFHIRAllergyIntolerance(ctx, params) +func (c *UseCasesClinicalImpl) SearchFHIRAllergyIntolerance(ctx context.Context, params map[string]interface{}) (*domain.FHIRAllergyIntoleranceRelayConnection, error) { + return c.infrastructure.FHIR.SearchFHIRAllergyIntolerance(ctx, params) } // CreateFHIRAllergyIntolerance creates a FHIRAllergyIntolerance instance -func (fh *UseCasesFHIRImpl) CreateFHIRAllergyIntolerance(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) { - return fh.infrastructure.FHIR.CreateFHIRAllergyIntolerance(ctx, input) +func (c *UseCasesClinicalImpl) CreateFHIRAllergyIntolerance(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) { + return c.infrastructure.FHIR.CreateFHIRAllergyIntolerance(ctx, input) } // UpdateFHIRAllergyIntolerance updates a FHIRAllergyIntolerance instance // The resource must have it's ID set. -func (fh *UseCasesFHIRImpl) UpdateFHIRAllergyIntolerance(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) { - return fh.infrastructure.FHIR.UpdateFHIRAllergyIntolerance(ctx, input) +func (c *UseCasesClinicalImpl) UpdateFHIRAllergyIntolerance(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) { + return c.infrastructure.FHIR.UpdateFHIRAllergyIntolerance(ctx, input) } // SearchFHIRComposition provides a search API for FHIRComposition -func (fh *UseCasesFHIRImpl) SearchFHIRComposition(ctx context.Context, params map[string]interface{}) (*domain.FHIRCompositionRelayConnection, error) { +func (c *UseCasesClinicalImpl) SearchFHIRComposition(ctx context.Context, params map[string]interface{}) (*domain.FHIRCompositionRelayConnection, error) { if params == nil { return nil, fmt.Errorf("can't search with nil params") } - return fh.infrastructure.FHIR.SearchFHIRComposition(ctx, params) + return c.infrastructure.FHIR.SearchFHIRComposition(ctx, params) } // CreateFHIRComposition creates a FHIRComposition instance -func (fh *UseCasesFHIRImpl) CreateFHIRComposition(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) { - return fh.infrastructure.FHIR.CreateFHIRComposition(ctx, input) +func (c *UseCasesClinicalImpl) CreateFHIRComposition(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) { + return c.infrastructure.FHIR.CreateFHIRComposition(ctx, input) } // UpdateFHIRComposition updates a FHIRComposition instance // The resource must have it's ID set. -func (fh *UseCasesFHIRImpl) UpdateFHIRComposition(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) { - return fh.infrastructure.FHIR.UpdateFHIRComposition(ctx, input) +func (c *UseCasesClinicalImpl) UpdateFHIRComposition(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) { + return c.infrastructure.FHIR.UpdateFHIRComposition(ctx, input) } // DeleteFHIRComposition deletes the FHIRComposition identified by the supplied ID -func (fh *UseCasesFHIRImpl) DeleteFHIRComposition(ctx context.Context, id string) (bool, error) { - return fh.infrastructure.FHIR.DeleteFHIRComposition(ctx, id) +func (c *UseCasesClinicalImpl) DeleteFHIRComposition(ctx context.Context, id string) (bool, error) { + return c.infrastructure.FHIR.DeleteFHIRComposition(ctx, id) } // SearchFHIRCondition provides a search API for FHIRCondition -func (fh *UseCasesFHIRImpl) SearchFHIRCondition(ctx context.Context, params map[string]interface{}) (*domain.FHIRConditionRelayConnection, error) { +func (c *UseCasesClinicalImpl) SearchFHIRCondition(ctx context.Context, params map[string]interface{}) (*domain.FHIRConditionRelayConnection, error) { if params == nil { return nil, fmt.Errorf("can't search with nil params") } - return fh.infrastructure.FHIR.SearchFHIRCondition(ctx, params) + return c.infrastructure.FHIR.SearchFHIRCondition(ctx, params) } // UpdateFHIRCondition updates a FHIRCondition instance // The resource must have it's ID set. -func (fh *UseCasesFHIRImpl) UpdateFHIRCondition(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) { - return fh.infrastructure.FHIR.UpdateFHIRCondition(ctx, input) +func (c *UseCasesClinicalImpl) UpdateFHIRCondition(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) { + return c.infrastructure.FHIR.UpdateFHIRCondition(ctx, input) } // GetFHIREncounter retrieves instances of FHIREncounter by ID -func (fh *UseCasesFHIRImpl) GetFHIREncounter(ctx context.Context, id string) (*domain.FHIREncounterRelayPayload, error) { - return fh.infrastructure.FHIR.GetFHIREncounter(ctx, id) +func (c *UseCasesClinicalImpl) GetFHIREncounter(ctx context.Context, id string) (*domain.FHIREncounterRelayPayload, error) { + return c.infrastructure.FHIR.GetFHIREncounter(ctx, id) } // SearchFHIREncounter provides a search API for FHIREncounter -func (fh *UseCasesFHIRImpl) SearchFHIREncounter(ctx context.Context, params map[string]interface{}) (*domain.FHIREncounterRelayConnection, error) { +func (c *UseCasesClinicalImpl) SearchFHIREncounter(ctx context.Context, params map[string]interface{}) (*domain.FHIREncounterRelayConnection, error) { if params == nil { return nil, fmt.Errorf("can't search with nil params") } - return fh.infrastructure.FHIR.SearchFHIREncounter(ctx, params) + return c.infrastructure.FHIR.SearchFHIREncounter(ctx, params) } // SearchFHIRMedicationRequest provides a search API for FHIRMedicationRequest -func (fh *UseCasesFHIRImpl) SearchFHIRMedicationRequest(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationRequestRelayConnection, error) { +func (c *UseCasesClinicalImpl) SearchFHIRMedicationRequest(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationRequestRelayConnection, error) { if params == nil { return nil, fmt.Errorf("can't search with nil params") } - return fh.infrastructure.FHIR.SearchFHIRMedicationRequest(ctx, params) + return c.infrastructure.FHIR.SearchFHIRMedicationRequest(ctx, params) } // CreateFHIRMedicationRequest creates a FHIRMedicationRequest instance -func (fh *UseCasesFHIRImpl) CreateFHIRMedicationRequest(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) { - return fh.infrastructure.FHIR.CreateFHIRMedicationRequest(ctx, input) +func (c *UseCasesClinicalImpl) CreateFHIRMedicationRequest(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) { + return c.infrastructure.FHIR.CreateFHIRMedicationRequest(ctx, input) } // UpdateFHIRMedicationRequest updates a FHIRMedicationRequest instance // The resource must have it's ID set. -func (fh *UseCasesFHIRImpl) UpdateFHIRMedicationRequest(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) { - return fh.infrastructure.FHIR.UpdateFHIRMedicationRequest(ctx, input) +func (c *UseCasesClinicalImpl) UpdateFHIRMedicationRequest(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) { + return c.infrastructure.FHIR.UpdateFHIRMedicationRequest(ctx, input) } // DeleteFHIRMedicationRequest deletes the FHIRMedicationRequest identified by the supplied ID -func (fh *UseCasesFHIRImpl) DeleteFHIRMedicationRequest(ctx context.Context, id string) (bool, error) { - return fh.infrastructure.FHIR.DeleteFHIRMedicationRequest(ctx, id) +func (c *UseCasesClinicalImpl) DeleteFHIRMedicationRequest(ctx context.Context, id string) (bool, error) { + return c.infrastructure.FHIR.DeleteFHIRMedicationRequest(ctx, id) } // SearchFHIRObservation provides a search API for FHIRObservation -func (fh *UseCasesFHIRImpl) SearchFHIRObservation(ctx context.Context, params map[string]interface{}) (*domain.FHIRObservationRelayConnection, error) { +func (c *UseCasesClinicalImpl) SearchFHIRObservation(ctx context.Context, params map[string]interface{}) (*domain.FHIRObservationRelayConnection, error) { if params == nil { return nil, fmt.Errorf("can't search with nil params") } - return fh.infrastructure.FHIR.SearchFHIRObservation(ctx, params) + return c.infrastructure.FHIR.SearchFHIRObservation(ctx, params) } // CreateFHIRObservation creates a FHIRObservation instance -func (fh *UseCasesFHIRImpl) CreateFHIRObservation(ctx context.Context, input domain.FHIRObservationInput) (*domain.FHIRObservationRelayPayload, error) { - return fh.infrastructure.FHIR.CreateFHIRObservation(ctx, input) +func (c *UseCasesClinicalImpl) CreateFHIRObservation(ctx context.Context, input domain.FHIRObservationInput) (*domain.FHIRObservationRelayPayload, error) { + return c.infrastructure.FHIR.CreateFHIRObservation(ctx, input) } // DeleteFHIRObservation deletes the FHIRObservation identified by the passed ID -func (fh *UseCasesFHIRImpl) DeleteFHIRObservation(ctx context.Context, id string) (bool, error) { - return fh.infrastructure.FHIR.DeleteFHIRObservation(ctx, id) +func (c *UseCasesClinicalImpl) DeleteFHIRObservation(ctx context.Context, id string) (bool, error) { + return c.infrastructure.FHIR.DeleteFHIRObservation(ctx, id) } // GetFHIRPatient retrieves instances of FHIRPatient by ID -func (fh *UseCasesFHIRImpl) GetFHIRPatient(ctx context.Context, id string) (*domain.FHIRPatientRelayPayload, error) { - return fh.infrastructure.FHIR.GetFHIRPatient(ctx, id) +func (c *UseCasesClinicalImpl) GetFHIRPatient(ctx context.Context, id string) (*domain.FHIRPatientRelayPayload, error) { + return c.infrastructure.FHIR.GetFHIRPatient(ctx, id) } // DeleteFHIRPatient deletes the FHIRPatient identified by the supplied ID -func (fh *UseCasesFHIRImpl) DeleteFHIRPatient(ctx context.Context, id string) (bool, error) { - return fh.infrastructure.FHIR.DeleteFHIRPatient(ctx, id) +func (c *UseCasesClinicalImpl) DeleteFHIRPatient(ctx context.Context, id string) (bool, error) { + return c.infrastructure.FHIR.DeleteFHIRPatient(ctx, id) } // DeleteFHIRResourceType takes a ResourceType and ID and deletes them from FHIR -func (fh *UseCasesFHIRImpl) DeleteFHIRResourceType(results []map[string]string) error { - return fh.infrastructure.FHIR.DeleteFHIRResourceType(results) +func (c *UseCasesClinicalImpl) DeleteFHIRResourceType(results []map[string]string) error { + return c.infrastructure.FHIR.DeleteFHIRResourceType(results) } // DeleteFHIRServiceRequest deletes the FHIRServiceRequest identified by the supplied ID -func (fh *UseCasesFHIRImpl) DeleteFHIRServiceRequest(ctx context.Context, id string) (bool, error) { - return fh.infrastructure.FHIR.DeleteFHIRServiceRequest(ctx, id) +func (c *UseCasesClinicalImpl) DeleteFHIRServiceRequest(ctx context.Context, id string) (bool, error) { + return c.infrastructure.FHIR.DeleteFHIRServiceRequest(ctx, id) } // CreateFHIRMedicationStatement creates a new FHIR Medication statement instance -func (fh *UseCasesFHIRImpl) CreateFHIRMedicationStatement(ctx context.Context, input domain.FHIRMedicationStatementInput) (*domain.FHIRMedicationStatementRelayPayload, error) { - return fh.infrastructure.FHIR.CreateFHIRMedicationStatement(ctx, input) +func (c *UseCasesClinicalImpl) CreateFHIRMedicationStatement(ctx context.Context, input domain.FHIRMedicationStatementInput) (*domain.FHIRMedicationStatementRelayPayload, error) { + return c.infrastructure.FHIR.CreateFHIRMedicationStatement(ctx, input) } // CreateFHIRMedication creates a new FHIR Medication instance -func (fh *UseCasesFHIRImpl) CreateFHIRMedication(ctx context.Context, input domain.FHIRMedicationInput) (*domain.FHIRMedicationRelayPayload, error) { - return fh.infrastructure.FHIR.CreateFHIRMedication(ctx, input) +func (c *UseCasesClinicalImpl) CreateFHIRMedication(ctx context.Context, input domain.FHIRMedicationInput) (*domain.FHIRMedicationRelayPayload, error) { + return c.infrastructure.FHIR.CreateFHIRMedication(ctx, input) } // SearchFHIRMedicationStatement used to search for a fhir medication statement -func (fh *UseCasesFHIRImpl) SearchFHIRMedicationStatement(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationStatementRelayConnection, error) { +func (c *UseCasesClinicalImpl) SearchFHIRMedicationStatement(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationStatementRelayConnection, error) { if params == nil { return nil, fmt.Errorf("can't search with nil params") } - return fh.infrastructure.FHIR.SearchFHIRMedicationStatement(ctx, params) + return c.infrastructure.FHIR.SearchFHIRMedicationStatement(ctx, params) } diff --git a/pkg/clinical/usecases/fhir/fhir_unit_test.go b/pkg/clinical/usecases/clinical/fhir_unit_test.go similarity index 96% rename from pkg/clinical/usecases/fhir/fhir_unit_test.go rename to pkg/clinical/usecases/clinical/fhir_unit_test.go index af835924..26890760 100644 --- a/pkg/clinical/usecases/fhir/fhir_unit_test.go +++ b/pkg/clinical/usecases/clinical/fhir_unit_test.go @@ -1,4 +1,4 @@ -package fhir_test +package clinical_test import ( "context" @@ -14,7 +14,7 @@ import ( fakeFHIRMock "github.com/savannahghi/clinical/pkg/clinical/infrastructure/datastore/fhir/mock" fakeDatasetMock "github.com/savannahghi/clinical/pkg/clinical/infrastructure/datastore/fhirdataset/mock" fakeOCLMock "github.com/savannahghi/clinical/pkg/clinical/infrastructure/services/openconceptlab/mock" - fhirUsecase "github.com/savannahghi/clinical/pkg/clinical/usecases/fhir" + clinicalUsecase "github.com/savannahghi/clinical/pkg/clinical/usecases/clinical" "github.com/savannahghi/scalarutils" "github.com/segmentio/ksuid" ) @@ -28,7 +28,7 @@ func TestUsecaseImpl_CreateEpisodeOfCare_Unittest(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) UUID := uuid.New().String() PatientRef := "Patient/1" @@ -111,7 +111,7 @@ func TestUsecaseStoreImpl_CreateFHIRCondition(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) ID := uuid.New().String() @@ -218,7 +218,7 @@ func TestUsecaseStoreImpl_CreateFHIROrganization_Unittest(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) ID := ksuid.New().String() active := true @@ -297,7 +297,7 @@ func TestUsecaseStoreImpl_FindOrganizationByID_Unittest(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) type args struct { ctx context.Context @@ -352,7 +352,7 @@ func TestUsecaseStoreImpl_SearchEpisodesByParam(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) type args struct { ctx context.Context @@ -405,7 +405,7 @@ func TestUsecaseStoreImpl_SearchFHIREpisodeOfCare(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) type args struct { ctx context.Context @@ -461,7 +461,7 @@ func TestUsecaseStoreImpl_OpenEpisodes(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) patientReference := fmt.Sprintf("Patient/%s", ksuid.New().String()) @@ -515,7 +515,7 @@ func TestUsecaseStoreImpl_HasOpenEpisode(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) UUID := uuid.New().String() @@ -577,7 +577,7 @@ func TestUsecaseStoreImpl_CreateFHIREncounter(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) input := domain.FHIREncounterInput{} type args struct { @@ -632,7 +632,7 @@ func TestUsecaseStoreImpl_GetFHIREpisodeOfCare(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) id := ksuid.New().String() @@ -687,7 +687,7 @@ func TestClinicalUseCaseImpl_StartEncounter(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) episodeID := uuid.New().String() @@ -734,7 +734,7 @@ func TestUsecaseStoreImpl_GetFHIREncounter(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) type args struct { ctx context.Context @@ -786,7 +786,7 @@ func TestUsecaseStoreImpl_CreateFHIRServiceRequest(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) UUID := uuid.New().String() @@ -841,7 +841,7 @@ func TestUsecaseStoreImpl_CreateFHIRAllergyIntolerance(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) UUID := uuid.New().String() @@ -896,7 +896,7 @@ func TestUsecaseStoreImpl_UpdateFHIRAllergyIntolerance(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) UUID := uuid.New().String() @@ -955,7 +955,7 @@ func TestUsecaseStoreImpl_SearchFHIRComposition(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) params := map[string]interface{}{"test": "123"} @@ -1011,7 +1011,7 @@ func TestUsecaseStoreImpl_CreateFHIRComposition(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) input := domain.FHIRCompositionInput{} @@ -1067,7 +1067,7 @@ func TestUsecaseStoreImpl_UpdateFHIRComposition(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) UUID := uuid.New().String() @@ -1126,7 +1126,7 @@ func TestUsecaseStoreImpl_DeleteFHIRComposition(t *testing.T) { Fakeopenconceptlab := fakeOCLMock.NewFakeOCLMock() n := infrastructure.NewInfrastructureInteractor(FakeExt, FakefhirRepository, Fakefhir, Fakeopenconceptlab) - m := fhirUsecase.NewUseCasesFHIRImpl(n) + m := clinicalUsecase.NewUseCasesClinicalImpl(n) id := ksuid.New().String() diff --git a/pkg/clinical/usecases/fhir/mock/fhir_mock.go b/pkg/clinical/usecases/clinical/mock/fhir_mock.go similarity index 100% rename from pkg/clinical/usecases/fhir/mock/fhir_mock.go rename to pkg/clinical/usecases/clinical/mock/fhir_mock.go diff --git a/pkg/clinical/usecases/clinical/patient.go b/pkg/clinical/usecases/clinical/patient.go index daf0aaa2..ee9a1ac8 100644 --- a/pkg/clinical/usecases/clinical/patient.go +++ b/pkg/clinical/usecases/clinical/patient.go @@ -16,7 +16,6 @@ import ( "github.com/savannahghi/clinical/pkg/clinical/application/utils" "github.com/savannahghi/clinical/pkg/clinical/domain" "github.com/savannahghi/clinical/pkg/clinical/infrastructure" - "github.com/savannahghi/clinical/pkg/clinical/usecases/fhir" "github.com/savannahghi/converterandformatter" "github.com/savannahghi/enumutils" "github.com/savannahghi/firebasetools" @@ -50,6 +49,8 @@ const ( // UseCasesClinical represents all the patient business logic type UseCasesClinical interface { + UseCasesFHIR + ProblemSummary(ctx context.Context, patientID string) ([]string, error) VisitSummary(ctx context.Context, encounterID string, count int) (map[string]interface{}, error) PatientTimelineWithCount(ctx context.Context, episodeID string, count int) ([]map[string]interface{}, error) @@ -74,7 +75,6 @@ type UseCasesClinical interface { // UseCasesClinicalImpl represents the patient usecase implementation type UseCasesClinicalImpl struct { infrastructure infrastructure.Infrastructure - fhirUsecase fhir.UseCasesFHIR } // NewUseCasesClinicalImpl initializes new Clinical/Patient implementation @@ -1113,7 +1113,7 @@ func (c *UseCasesClinicalImpl) StartEpisodeByBreakGlass( log.Printf("failed to send alert message to admin during StartEpisodeByBreakGlass login: %s", err) } } - organizationID, err := c.fhirUsecase.GetORCreateOrganization(ctx, input.ProviderCode) + organizationID, err := c.GetORCreateOrganization(ctx, input.ProviderCode) if err != nil { utils.ReportErrorToSentry(err) return nil, fmt.Errorf( diff --git a/pkg/clinical/usecases/config_test.go b/pkg/clinical/usecases/config_test.go index 0ab7610b..2f774042 100644 --- a/pkg/clinical/usecases/config_test.go +++ b/pkg/clinical/usecases/config_test.go @@ -14,8 +14,8 @@ import ( "github.com/savannahghi/clinical/pkg/clinical/infrastructure/services/openconceptlab" "github.com/savannahghi/clinical/pkg/clinical/presentation/interactor" "github.com/savannahghi/clinical/pkg/clinical/usecases" - usecaseMock "github.com/savannahghi/clinical/pkg/clinical/usecases/mock" "github.com/savannahghi/clinical/pkg/clinical/usecases/ocl" + oclMock "github.com/savannahghi/clinical/pkg/clinical/usecases/ocl/mock" "github.com/savannahghi/firebasetools" log "github.com/sirupsen/logrus" ) @@ -27,7 +27,7 @@ var ( testFakeInfra usecases.Interactor FHIRRepoMock fhirRepoMock.FakeFHIRRepository - fakeOCL usecaseMock.OCLMock + fakeOCL oclMock.OCLMock fakeBaseExtension extensionMock.FakeBaseExtension ) diff --git a/pkg/clinical/usecases/mock/fhr_mock.go b/pkg/clinical/usecases/mock/fhr_mock.go deleted file mode 100644 index 52cb9f11..00000000 --- a/pkg/clinical/usecases/mock/fhr_mock.go +++ /dev/null @@ -1,445 +0,0 @@ -package mock - -import ( - "context" - "io" - "net/url" - - "github.com/savannahghi/clinical/pkg/clinical/domain" -) - -// FHIRMock contains all mock methods -type FHIRMock struct { - CreateEpisodeOfCareFn func(ctx context.Context, episode domain.FHIREpisodeOfCare) (*domain.EpisodeOfCarePayload, error) - CreateFHIRConditionFn func(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) - OpenOrganizationEpisodesFn func(ctx context.Context, providerSladeCode string) ([]*domain.FHIREpisodeOfCare, error) - GetORCreateOrganizationFn func(ctx context.Context, providerSladeCode string) (*string, error) - GetOrganizationFn func(ctx context.Context, providerSladeCode string) (*string, error) - CreateFHIROrganizationFn func(ctx context.Context, input domain.FHIROrganizationInput) (*domain.FHIROrganizationRelayPayload, error) - CreateOrganizationFn func(ctx context.Context, providerSladeCode string) (*string, error) - SearchFHIROrganizationFn func(ctx context.Context, params map[string]interface{}) (*domain.FHIROrganizationRelayConnection, error) - POSTRequestFn func(resourceName string, path string, params url.Values, body io.Reader) ([]byte, error) - SearchEpisodesByParamFn func(ctx context.Context, searchParams url.Values) ([]*domain.FHIREpisodeOfCare, error) - HasOpenEpisodeFn func(ctx context.Context, patient domain.FHIRPatient) (bool, error) - OpenEpisodesFn func(ctx context.Context, patientReference string) ([]*domain.FHIREpisodeOfCare, error) - CreateFHIREncounterFn func(ctx context.Context, input domain.FHIREncounterInput) (*domain.FHIREncounterRelayPayload, error) - GetFHIREpisodeOfCareFn func(ctx context.Context, id string) (*domain.FHIREpisodeOfCareRelayPayload, error) - EncountersFn func(ctx context.Context, patientReference string, status *domain.EncounterStatusEnum) ([]*domain.FHIREncounter, error) - SearchFHIREpisodeOfCareFn func(ctx context.Context, params map[string]interface{}) (*domain.FHIREpisodeOfCareRelayConnection, error) - StartEncounterFn func(ctx context.Context, episodeID string) (string, error) - StartEpisodeByOtpFn func(ctx context.Context, input domain.OTPEpisodeCreationInput) (*domain.EpisodeOfCarePayload, error) - UpgradeEpisodeFn func(ctx context.Context, input domain.OTPEpisodeUpgradeInput) (*domain.EpisodeOfCarePayload, error) - SearchEpisodeEncounterFn func(ctx context.Context, episodeReference string) (*domain.FHIREncounterRelayConnection, error) - EndEncounterFn func(ctx context.Context, encounterID string) (bool, error) - EndEpisodeFn func(ctx context.Context, episodeID string) (bool, error) - GetActiveEpisodeFn func(ctx context.Context, episodeID string) (*domain.FHIREpisodeOfCare, error) - SearchFHIRServiceRequestFn func(ctx context.Context, params map[string]interface{}) (*domain.FHIRServiceRequestRelayConnection, error) - CreateFHIRServiceRequestFn func(ctx context.Context, input domain.FHIRServiceRequestInput) (*domain.FHIRServiceRequestRelayPayload, error) - SearchFHIRAllergyIntoleranceFn func(ctx context.Context, params map[string]interface{}) (*domain.FHIRAllergyIntoleranceRelayConnection, error) - CreateFHIRAllergyIntoleranceFn func(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) - UpdateFHIRAllergyIntoleranceFn func(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) - SearchFHIRCompositionFn func(ctx context.Context, params map[string]interface{}) (*domain.FHIRCompositionRelayConnection, error) - CreateFHIRCompositionFn func(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) - UpdateFHIRCompositionFn func(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) - DeleteFHIRCompositionFn func(ctx context.Context, id string) (bool, error) - SearchFHIRConditionFn func(ctx context.Context, params map[string]interface{}) (*domain.FHIRConditionRelayConnection, error) - UpdateFHIRConditionFn func(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) - GetFHIREncounterFn func(ctx context.Context, id string) (*domain.FHIREncounterRelayPayload, error) - SearchFHIREncounterFn func(ctx context.Context, params map[string]interface{}) (*domain.FHIREncounterRelayConnection, error) - SearchFHIRMedicationRequestFn func(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationRequestRelayConnection, error) - CreateFHIRMedicationRequestFn func(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) - UpdateFHIRMedicationRequestFn func(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) - DeleteFHIRMedicationRequestFn func(ctx context.Context, id string) (bool, error) - SearchFHIRObservationFn func(ctx context.Context, params map[string]interface{}) (*domain.FHIRObservationRelayConnection, error) - CreateFHIRObservationFn func(ctx context.Context, input domain.FHIRObservationInput) (*domain.FHIRObservationRelayPayload, error) - DeleteFHIRObservationFn func(ctx context.Context, id string) (bool, error) - GetFHIRPatientFn func(ctx context.Context, id string) (*domain.FHIRPatientRelayPayload, error) - DeleteFHIRPatientFn func(ctx context.Context, id string) (bool, error) - DeleteFHIRResourceTypeFn func(results []map[string]string) error - DeleteFHIRServiceRequestFn func(ctx context.Context, id string) (bool, error) -} - -// NewFHIRMock is a new instance of FHIRMock -func NewFHIRMock() *FHIRMock { - return &FHIRMock{ - CreateEpisodeOfCareFn: func(ctx context.Context, episode domain.FHIREpisodeOfCare) (*domain.EpisodeOfCarePayload, error) { - return &domain.EpisodeOfCarePayload{}, nil - }, - CreateFHIRConditionFn: func(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) { - return &domain.FHIRConditionRelayPayload{}, nil - }, - OpenOrganizationEpisodesFn: func(ctx context.Context, providerSladeCode string) ([]*domain.FHIREpisodeOfCare, error) { - return []*domain.FHIREpisodeOfCare{}, nil - }, - GetORCreateOrganizationFn: func(ctx context.Context, providerSladeCode string) (*string, error) { - org := "test-organization" - return &org, nil - }, - GetOrganizationFn: func(ctx context.Context, providerSladeCode string) (*string, error) { - org := "test-organization" - return &org, nil - }, - CreateFHIROrganizationFn: func(ctx context.Context, input domain.FHIROrganizationInput) (*domain.FHIROrganizationRelayPayload, error) { - return &domain.FHIROrganizationRelayPayload{}, nil - }, - CreateOrganizationFn: func(ctx context.Context, providerSladeCode string) (*string, error) { - org := "test-organization" - return &org, nil - }, - SearchFHIROrganizationFn: func(ctx context.Context, params map[string]interface{}) (*domain.FHIROrganizationRelayConnection, error) { - return &domain.FHIROrganizationRelayConnection{}, nil - }, - POSTRequestFn: func(resourceName string, path string, params url.Values, body io.Reader) ([]byte, error) { - return []byte(""), nil - }, - SearchEpisodesByParamFn: func(ctx context.Context, searchParams url.Values) ([]*domain.FHIREpisodeOfCare, error) { - return []*domain.FHIREpisodeOfCare{}, nil - }, - HasOpenEpisodeFn: func(ctx context.Context, patient domain.FHIRPatient) (bool, error) { - return true, nil - }, - OpenEpisodesFn: func(ctx context.Context, patientReference string) ([]*domain.FHIREpisodeOfCare, error) { - return []*domain.FHIREpisodeOfCare{}, nil - }, - CreateFHIREncounterFn: func(ctx context.Context, input domain.FHIREncounterInput) (*domain.FHIREncounterRelayPayload, error) { - return &domain.FHIREncounterRelayPayload{}, nil - }, - GetFHIREpisodeOfCareFn: func(ctx context.Context, id string) (*domain.FHIREpisodeOfCareRelayPayload, error) { - return &domain.FHIREpisodeOfCareRelayPayload{}, nil - }, - EncountersFn: func(ctx context.Context, patientReference string, status *domain.EncounterStatusEnum) ([]*domain.FHIREncounter, error) { - return []*domain.FHIREncounter{}, nil - }, - SearchFHIREpisodeOfCareFn: func(ctx context.Context, params map[string]interface{}) (*domain.FHIREpisodeOfCareRelayConnection, error) { - return &domain.FHIREpisodeOfCareRelayConnection{}, nil - }, - StartEncounterFn: func(ctx context.Context, episodeID string) (string, error) { - return "test-encounter", nil - }, - StartEpisodeByOtpFn: func(ctx context.Context, input domain.OTPEpisodeCreationInput) (*domain.EpisodeOfCarePayload, error) { - return &domain.EpisodeOfCarePayload{}, nil - }, - UpgradeEpisodeFn: func(ctx context.Context, input domain.OTPEpisodeUpgradeInput) (*domain.EpisodeOfCarePayload, error) { - return &domain.EpisodeOfCarePayload{}, nil - }, - SearchEpisodeEncounterFn: func(ctx context.Context, episodeReference string) (*domain.FHIREncounterRelayConnection, error) { - return &domain.FHIREncounterRelayConnection{}, nil - }, - EndEncounterFn: func(ctx context.Context, encounterID string) (bool, error) { - return true, nil - }, - EndEpisodeFn: func(ctx context.Context, episodeID string) (bool, error) { - return true, nil - }, - GetActiveEpisodeFn: func(ctx context.Context, episodeID string) (*domain.FHIREpisodeOfCare, error) { - return &domain.FHIREpisodeOfCare{}, nil - }, - SearchFHIRServiceRequestFn: func(ctx context.Context, params map[string]interface{}) (*domain.FHIRServiceRequestRelayConnection, error) { - return &domain.FHIRServiceRequestRelayConnection{}, nil - }, - CreateFHIRServiceRequestFn: func(ctx context.Context, input domain.FHIRServiceRequestInput) (*domain.FHIRServiceRequestRelayPayload, error) { - return &domain.FHIRServiceRequestRelayPayload{}, nil - }, - SearchFHIRAllergyIntoleranceFn: func(ctx context.Context, params map[string]interface{}) (*domain.FHIRAllergyIntoleranceRelayConnection, error) { - return &domain.FHIRAllergyIntoleranceRelayConnection{}, nil - }, - CreateFHIRAllergyIntoleranceFn: func(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) { - return &domain.FHIRAllergyIntoleranceRelayPayload{}, nil - }, - UpdateFHIRAllergyIntoleranceFn: func(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) { - return &domain.FHIRAllergyIntoleranceRelayPayload{}, nil - }, - SearchFHIRCompositionFn: func(ctx context.Context, params map[string]interface{}) (*domain.FHIRCompositionRelayConnection, error) { - return &domain.FHIRCompositionRelayConnection{}, nil - }, - CreateFHIRCompositionFn: func(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) { - return &domain.FHIRCompositionRelayPayload{}, nil - }, - UpdateFHIRCompositionFn: func(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) { - return &domain.FHIRCompositionRelayPayload{}, nil - }, - DeleteFHIRCompositionFn: func(ctx context.Context, id string) (bool, error) { - return true, nil - }, - SearchFHIRConditionFn: func(ctx context.Context, params map[string]interface{}) (*domain.FHIRConditionRelayConnection, error) { - return &domain.FHIRConditionRelayConnection{}, nil - }, - UpdateFHIRConditionFn: func(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) { - return &domain.FHIRConditionRelayPayload{}, nil - }, - GetFHIREncounterFn: func(ctx context.Context, id string) (*domain.FHIREncounterRelayPayload, error) { - return &domain.FHIREncounterRelayPayload{}, nil - }, - SearchFHIREncounterFn: func(ctx context.Context, params map[string]interface{}) (*domain.FHIREncounterRelayConnection, error) { - return &domain.FHIREncounterRelayConnection{}, nil - }, - SearchFHIRMedicationRequestFn: func(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationRequestRelayConnection, error) { - return &domain.FHIRMedicationRequestRelayConnection{}, nil - }, - CreateFHIRMedicationRequestFn: func(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) { - return &domain.FHIRMedicationRequestRelayPayload{}, nil - }, - UpdateFHIRMedicationRequestFn: func(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) { - return &domain.FHIRMedicationRequestRelayPayload{}, nil - }, - DeleteFHIRMedicationRequestFn: func(ctx context.Context, id string) (bool, error) { - return true, nil - }, - SearchFHIRObservationFn: func(ctx context.Context, params map[string]interface{}) (*domain.FHIRObservationRelayConnection, error) { - return &domain.FHIRObservationRelayConnection{}, nil - }, - CreateFHIRObservationFn: func(ctx context.Context, input domain.FHIRObservationInput) (*domain.FHIRObservationRelayPayload, error) { - return &domain.FHIRObservationRelayPayload{}, nil - }, - DeleteFHIRObservationFn: func(ctx context.Context, id string) (bool, error) { - return true, nil - }, - GetFHIRPatientFn: func(ctx context.Context, id string) (*domain.FHIRPatientRelayPayload, error) { - return &domain.FHIRPatientRelayPayload{}, nil - }, - DeleteFHIRPatientFn: func(ctx context.Context, id string) (bool, error) { - return true, nil - }, - DeleteFHIRResourceTypeFn: func(results []map[string]string) error { - return nil - }, - DeleteFHIRServiceRequestFn: func(ctx context.Context, id string) (bool, error) { - return true, nil - }, - } -} - -// CreateEpisodeOfCare is a mock implementation of CreateEpisodeOfCare method -func (fh *FHIRMock) CreateEpisodeOfCare(ctx context.Context, episode domain.FHIREpisodeOfCare) (*domain.EpisodeOfCarePayload, error) { - return fh.CreateEpisodeOfCareFn(ctx, episode) -} - -// CreateFHIRCondition is a mock implementation of CreateFHIRCondition method -func (fh *FHIRMock) CreateFHIRCondition(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) { - return fh.CreateFHIRConditionFn(ctx, input) -} - -// OpenOrganizationEpisodes is a mock implementation of OpenOrganizationEpisodes method -func (fh *FHIRMock) OpenOrganizationEpisodes(ctx context.Context, providerSladeCode string) ([]*domain.FHIREpisodeOfCare, error) { - return fh.OpenOrganizationEpisodesFn(ctx, providerSladeCode) -} - -// GetORCreateOrganization is a mock implementation of GetORCreateOrganization method -func (fh *FHIRMock) GetORCreateOrganization(ctx context.Context, providerSladeCode string) (*string, error) { - return fh.GetORCreateOrganizationFn(ctx, providerSladeCode) -} - -// GetOrganization is a mock implementation of GetOrganization method -func (fh *FHIRMock) GetOrganization(ctx context.Context, providerSladeCode string) (*string, error) { - return fh.GetOrganizationFn(ctx, providerSladeCode) -} - -// CreateFHIROrganization is a mock implementation of CreateFHIROrganization method -func (fh *FHIRMock) CreateFHIROrganization(ctx context.Context, input domain.FHIROrganizationInput) (*domain.FHIROrganizationRelayPayload, error) { - return fh.CreateFHIROrganizationFn(ctx, input) -} - -// CreateOrganization is a mock implementation of CreateOrganization method -func (fh *FHIRMock) CreateOrganization(ctx context.Context, providerSladeCode string) (*string, error) { - return fh.CreateOrganizationFn(ctx, providerSladeCode) -} - -// SearchFHIROrganization is a mock implementation of SearchFHIROrganization method -func (fh *FHIRMock) SearchFHIROrganization(ctx context.Context, params map[string]interface{}) (*domain.FHIROrganizationRelayConnection, error) { - return fh.SearchFHIROrganizationFn(ctx, params) -} - -// POSTRequest is a mock implementation of POSTRequest method -func (fh *FHIRMock) POSTRequest(resourceName string, path string, params url.Values, body io.Reader) ([]byte, error) { - return fh.POSTRequestFn(resourceName, path, params, body) -} - -// SearchEpisodesByParam is a mock implementation of SearchEpisodesByParam method -func (fh *FHIRMock) SearchEpisodesByParam(ctx context.Context, searchParams url.Values) ([]*domain.FHIREpisodeOfCare, error) { - return fh.SearchEpisodesByParamFn(ctx, searchParams) -} - -// HasOpenEpisode is a mock implementation of HasOpenEpisode method -func (fh *FHIRMock) HasOpenEpisode(ctx context.Context, patient domain.FHIRPatient) (bool, error) { - return fh.HasOpenEpisodeFn(ctx, patient) -} - -// OpenEpisodes is a mock implementation of OpenEpisodes method -func (fh *FHIRMock) OpenEpisodes(ctx context.Context, patientReference string) ([]*domain.FHIREpisodeOfCare, error) { - return fh.OpenEpisodesFn(ctx, patientReference) -} - -// CreateFHIREncounter is a mock implementation of CreateFHIREncounter method -func (fh *FHIRMock) CreateFHIREncounter(ctx context.Context, input domain.FHIREncounterInput) (*domain.FHIREncounterRelayPayload, error) { - return fh.CreateFHIREncounterFn(ctx, input) -} - -// GetFHIREpisodeOfCare is a mock implementation of GetFHIREpisodeOfCare method -func (fh *FHIRMock) GetFHIREpisodeOfCare(ctx context.Context, id string) (*domain.FHIREpisodeOfCareRelayPayload, error) { - return fh.GetFHIREpisodeOfCareFn(ctx, id) -} - -// Encounters is a mock implementation of Encounters method -func (fh *FHIRMock) Encounters(ctx context.Context, patientReference string, status *domain.EncounterStatusEnum) ([]*domain.FHIREncounter, error) { - return fh.EncountersFn(ctx, patientReference, status) -} - -// SearchFHIREpisodeOfCare is a mock implementation of SearchFHIREpisodeOfCare method -func (fh *FHIRMock) SearchFHIREpisodeOfCare(ctx context.Context, params map[string]interface{}) (*domain.FHIREpisodeOfCareRelayConnection, error) { - return fh.SearchFHIREpisodeOfCareFn(ctx, params) -} - -// StartEncounter is a mock implementation of StartEncounter method -func (fh *FHIRMock) StartEncounter(ctx context.Context, episodeID string) (string, error) { - return fh.StartEncounterFn(ctx, episodeID) -} - -// StartEpisodeByOtp is a mock implementation of StartEpisodeByOtp method -func (fh *FHIRMock) StartEpisodeByOtp(ctx context.Context, input domain.OTPEpisodeCreationInput) (*domain.EpisodeOfCarePayload, error) { - return fh.StartEpisodeByOtpFn(ctx, input) -} - -// UpgradeEpisode is a mock implementation of UpgradeEpisode method -func (fh *FHIRMock) UpgradeEpisode(ctx context.Context, input domain.OTPEpisodeUpgradeInput) (*domain.EpisodeOfCarePayload, error) { - return fh.UpgradeEpisodeFn(ctx, input) -} - -// SearchEpisodeEncounter is a mock implementation of SearchEpisodeEncounter method -func (fh *FHIRMock) SearchEpisodeEncounter(ctx context.Context, episodeReference string) (*domain.FHIREncounterRelayConnection, error) { - return fh.SearchEpisodeEncounterFn(ctx, episodeReference) -} - -// EndEncounter is a mock implementation of EndEncounter method -func (fh *FHIRMock) EndEncounter(ctx context.Context, encounterID string) (bool, error) { - return fh.EndEncounterFn(ctx, encounterID) -} - -// EndEpisode is a mock implementation of EndEpisode method -func (fh *FHIRMock) EndEpisode(ctx context.Context, episodeID string) (bool, error) { - return fh.EndEpisodeFn(ctx, episodeID) -} - -// GetActiveEpisode is a mock implementation of GetActiveEpisode method -func (fh *FHIRMock) GetActiveEpisode(ctx context.Context, episodeID string) (*domain.FHIREpisodeOfCare, error) { - return fh.GetActiveEpisodeFn(ctx, episodeID) -} - -// SearchFHIRServiceRequest is a mock implementation of SearchFHIRServiceRequest method -func (fh *FHIRMock) SearchFHIRServiceRequest(ctx context.Context, params map[string]interface{}) (*domain.FHIRServiceRequestRelayConnection, error) { - return fh.SearchFHIRServiceRequestFn(ctx, params) -} - -// CreateFHIRServiceRequest is a mock implementation of CreateFHIRServiceRequest method -func (fh *FHIRMock) CreateFHIRServiceRequest(ctx context.Context, input domain.FHIRServiceRequestInput) (*domain.FHIRServiceRequestRelayPayload, error) { - return fh.CreateFHIRServiceRequestFn(ctx, input) -} - -// SearchFHIRAllergyIntolerance is a mock implementation of SearchFHIRAllergyIntolerance method -func (fh *FHIRMock) SearchFHIRAllergyIntolerance(ctx context.Context, params map[string]interface{}) (*domain.FHIRAllergyIntoleranceRelayConnection, error) { - return fh.SearchFHIRAllergyIntoleranceFn(ctx, params) -} - -// CreateFHIRAllergyIntolerance is a mock implementation of CreateFHIRAllergyIntolerance method -func (fh *FHIRMock) CreateFHIRAllergyIntolerance(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) { - return fh.CreateFHIRAllergyIntoleranceFn(ctx, input) -} - -// UpdateFHIRAllergyIntolerance is a mock implementation of UpdateFHIRAllergyIntolerance method -func (fh *FHIRMock) UpdateFHIRAllergyIntolerance(ctx context.Context, input domain.FHIRAllergyIntoleranceInput) (*domain.FHIRAllergyIntoleranceRelayPayload, error) { - return fh.UpdateFHIRAllergyIntoleranceFn(ctx, input) -} - -// SearchFHIRComposition is a mock implementation of SearchFHIRComposition method -func (fh *FHIRMock) SearchFHIRComposition(ctx context.Context, params map[string]interface{}) (*domain.FHIRCompositionRelayConnection, error) { - return fh.SearchFHIRCompositionFn(ctx, params) -} - -// CreateFHIRComposition is a mock implementation of CreateFHIRComposition method -func (fh *FHIRMock) CreateFHIRComposition(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) { - return fh.CreateFHIRCompositionFn(ctx, input) -} - -// UpdateFHIRComposition is a mock implementation of UpdateFHIRComposition method -func (fh *FHIRMock) UpdateFHIRComposition(ctx context.Context, input domain.FHIRCompositionInput) (*domain.FHIRCompositionRelayPayload, error) { - return fh.UpdateFHIRCompositionFn(ctx, input) -} - -// DeleteFHIRComposition is a mock implementation of DeleteFHIRComposition method -func (fh *FHIRMock) DeleteFHIRComposition(ctx context.Context, id string) (bool, error) { - return fh.DeleteFHIRCompositionFn(ctx, id) -} - -// SearchFHIRCondition is a mock implementation of SearchFHIRCondition method -func (fh *FHIRMock) SearchFHIRCondition(ctx context.Context, params map[string]interface{}) (*domain.FHIRConditionRelayConnection, error) { - return fh.SearchFHIRConditionFn(ctx, params) -} - -// UpdateFHIRCondition is a mock implementation of UpdateFHIRCondition method -func (fh *FHIRMock) UpdateFHIRCondition(ctx context.Context, input domain.FHIRConditionInput) (*domain.FHIRConditionRelayPayload, error) { - return fh.UpdateFHIRConditionFn(ctx, input) -} - -// GetFHIREncounter is a mock implementation of GetFHIREncounter method -func (fh *FHIRMock) GetFHIREncounter(ctx context.Context, id string) (*domain.FHIREncounterRelayPayload, error) { - return fh.GetFHIREncounterFn(ctx, id) -} - -// SearchFHIREncounter is a mock implementation of SearchFHIREncounter method -func (fh *FHIRMock) SearchFHIREncounter(ctx context.Context, params map[string]interface{}) (*domain.FHIREncounterRelayConnection, error) { - return fh.SearchFHIREncounterFn(ctx, params) -} - -// SearchFHIRMedicationRequest is a mock implementation of SearchFHIRMedicationRequest method -func (fh *FHIRMock) SearchFHIRMedicationRequest(ctx context.Context, params map[string]interface{}) (*domain.FHIRMedicationRequestRelayConnection, error) { - return fh.SearchFHIRMedicationRequestFn(ctx, params) -} - -// CreateFHIRMedicationRequest is a mock implementation of CreateFHIRMedicationRequest method -func (fh *FHIRMock) CreateFHIRMedicationRequest(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) { - return fh.CreateFHIRMedicationRequestFn(ctx, input) -} - -// UpdateFHIRMedicationRequest is a mock implementation of UpdateFHIRMedicationRequest method -func (fh *FHIRMock) UpdateFHIRMedicationRequest(ctx context.Context, input domain.FHIRMedicationRequestInput) (*domain.FHIRMedicationRequestRelayPayload, error) { - return fh.UpdateFHIRMedicationRequestFn(ctx, input) -} - -// DeleteFHIRMedicationRequest is a mock implementation of DeleteFHIRMedicationRequest method -func (fh *FHIRMock) DeleteFHIRMedicationRequest(ctx context.Context, id string) (bool, error) { - return fh.DeleteFHIRMedicationRequestFn(ctx, id) -} - -// SearchFHIRObservation is a mock implementation of SearchFHIRObservation method -func (fh *FHIRMock) SearchFHIRObservation(ctx context.Context, params map[string]interface{}) (*domain.FHIRObservationRelayConnection, error) { - return fh.SearchFHIRObservationFn(ctx, params) -} - -// CreateFHIRObservation is a mock implementation of CreateFHIRObservation method -func (fh *FHIRMock) CreateFHIRObservation(ctx context.Context, input domain.FHIRObservationInput) (*domain.FHIRObservationRelayPayload, error) { - return fh.CreateFHIRObservationFn(ctx, input) -} - -// DeleteFHIRObservation is a mock implementation of DeleteFHIRObservation method -func (fh *FHIRMock) DeleteFHIRObservation(ctx context.Context, id string) (bool, error) { - return fh.DeleteFHIRObservationFn(ctx, id) -} - -// GetFHIRPatient is a mock implementation of GetFHIRPatient method -func (fh *FHIRMock) GetFHIRPatient(ctx context.Context, id string) (*domain.FHIRPatientRelayPayload, error) { - return fh.GetFHIRPatientFn(ctx, id) -} - -// DeleteFHIRPatient is a mock implementation of DeleteFHIRPatient method -func (fh *FHIRMock) DeleteFHIRPatient(ctx context.Context, id string) (bool, error) { - return fh.DeleteFHIRPatientFn(ctx, id) -} - -// DeleteFHIRResourceType is a mock implementation of DeleteFHIRResourceType method -func (fh *FHIRMock) DeleteFHIRResourceType(results []map[string]string) error { - return fh.DeleteFHIRResourceTypeFn(results) -} - -// DeleteFHIRServiceRequest is a mock implementation of DeleteFHIRServiceRequest method -func (fh *FHIRMock) DeleteFHIRServiceRequest(ctx context.Context, id string) (bool, error) { - return fh.DeleteFHIRServiceRequestFn(ctx, id) -} diff --git a/pkg/clinical/usecases/mock/patient_mock.go b/pkg/clinical/usecases/mock/patient_mock.go deleted file mode 100644 index 7f9869c1..00000000 --- a/pkg/clinical/usecases/mock/patient_mock.go +++ /dev/null @@ -1,242 +0,0 @@ -package mock - -import ( - "context" - - "github.com/savannahghi/clinical/pkg/clinical/domain" - "github.com/savannahghi/firebasetools" - "github.com/segmentio/ksuid" -) - -// ClinicalMock instantiates all the mock functions -type ClinicalMock struct { - ProblemSummaryFn func(ctx context.Context, patientID string) ([]string, error) - VisitSummaryFn func(ctx context.Context, encounterID string, count int) (map[string]interface{}, error) - PatientTimelineWithCountFn func(ctx context.Context, episodeID string, count int) ([]map[string]interface{}, error) - ContactsToContactPointInputFn func(ctx context.Context, phones []*domain.PhoneNumberInput, emails []*domain.EmailInput) ([]*domain.FHIRContactPointInput, error) - RegisterPatientFn func(ctx context.Context, input domain.SimplePatientRegistrationInput) (*domain.PatientPayload, error) - CreatePatientFn func(ctx context.Context, input domain.FHIRPatientInput) (*domain.PatientPayload, error) - FindPatientByIDFn func(ctx context.Context, id string) (*domain.PatientPayload, error) - PatientSearchFn func(ctx context.Context, search string) (*domain.PatientConnection, error) - UpdatePatientFn func(ctx context.Context, input domain.SimplePatientRegistrationInput) (*domain.PatientPayload, error) - AddNextOfKinFn func(ctx context.Context, input domain.SimpleNextOfKinInput) (*domain.PatientPayload, error) - AddNHIFFn func(ctx context.Context, input *domain.SimpleNHIFInput) (*domain.PatientPayload, error) - RegisterUserFn func(ctx context.Context, input domain.SimplePatientRegistrationInput) (*domain.PatientPayload, error) - CreateUpdatePatientExtraInformationFn func(ctx context.Context, input domain.PatientExtraInformationInput) (bool, error) - AllergySummaryFn func(ctx context.Context, patientID string) ([]string, error) - DeleteFHIRPatientByPhoneFn func(ctx context.Context, phoneNumber string) (bool, error) - StartEpisodeByBreakGlassFn func(ctx context.Context, input domain.BreakGlassEpisodeCreationInput) (*domain.EpisodeOfCarePayload, error) - FindPatientsByMSISDNFn func(ctx context.Context, msisdn string) (*domain.PatientConnection, error) -} - -// NewClinicalMock is a new instance of ClinicalMock -func NewClinicalMock() *ClinicalMock { - return &ClinicalMock{ - ProblemSummaryFn: func(ctx context.Context, patientID string) ([]string, error) { - return []string{"Sick"}, nil - }, - - VisitSummaryFn: func(ctx context.Context, encounterID string, count int) (map[string]interface{}, error) { - return map[string]interface{}{ - "Condition": "Heart", - }, nil - }, - - PatientTimelineWithCountFn: func(ctx context.Context, episodeID string, count int) ([]map[string]interface{}, error) { - return []map[string]interface{}{ - 1: { - "Test": "Test", - }, - }, nil - }, - - ContactsToContactPointInputFn: func(ctx context.Context, phones []*domain.PhoneNumberInput, emails []*domain.EmailInput) ([]*domain.FHIRContactPointInput, error) { - return []*domain.FHIRContactPointInput{}, nil - }, - - RegisterPatientFn: func(ctx context.Context, input domain.SimplePatientRegistrationInput) (*domain.PatientPayload, error) { - id := ksuid.New().String() - return &domain.PatientPayload{ - PatientRecord: &domain.FHIRPatient{ - ID: &id, - }, - }, nil - }, - - CreatePatientFn: func(ctx context.Context, input domain.FHIRPatientInput) (*domain.PatientPayload, error) { - id := ksuid.New().String() - return &domain.PatientPayload{ - PatientRecord: &domain.FHIRPatient{ - ID: &id, - }, - }, nil - }, - - FindPatientByIDFn: func(ctx context.Context, id string) (*domain.PatientPayload, error) { - patientID := ksuid.New().String() - return &domain.PatientPayload{ - PatientRecord: &domain.FHIRPatient{ - ID: &patientID, - }, - }, nil - }, - - PatientSearchFn: func(ctx context.Context, search string) (*domain.PatientConnection, error) { - return &domain.PatientConnection{ - Edges: []*domain.PatientEdge{}, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: true, - HasPreviousPage: true, - }, - }, nil - }, - - UpdatePatientFn: func(ctx context.Context, input domain.SimplePatientRegistrationInput) (*domain.PatientPayload, error) { - ID := ksuid.New().String() - return &domain.PatientPayload{ - PatientRecord: &domain.FHIRPatient{ - ID: &ID, - }, - }, nil - }, - - AddNextOfKinFn: func(ctx context.Context, input domain.SimpleNextOfKinInput) (*domain.PatientPayload, error) { - ID := ksuid.New().String() - return &domain.PatientPayload{ - PatientRecord: &domain.FHIRPatient{ - ID: &ID, - }, - }, nil - }, - - AddNHIFFn: func(ctx context.Context, input *domain.SimpleNHIFInput) (*domain.PatientPayload, error) { - ID := ksuid.New().String() - return &domain.PatientPayload{ - PatientRecord: &domain.FHIRPatient{ - ID: &ID, - }, - }, nil - }, - - RegisterUserFn: func(ctx context.Context, input domain.SimplePatientRegistrationInput) (*domain.PatientPayload, error) { - ID := ksuid.New().String() - return &domain.PatientPayload{ - PatientRecord: &domain.FHIRPatient{ - ID: &ID, - }, - }, nil - }, - - CreateUpdatePatientExtraInformationFn: func(ctx context.Context, input domain.PatientExtraInformationInput) (bool, error) { - return true, nil - }, - - AllergySummaryFn: func(ctx context.Context, patientID string) ([]string, error) { - return []string{"Test Allergy"}, nil - }, - - DeleteFHIRPatientByPhoneFn: func(ctx context.Context, phoneNumber string) (bool, error) { - return true, nil - }, - - StartEpisodeByBreakGlassFn: func(ctx context.Context, input domain.BreakGlassEpisodeCreationInput) (*domain.EpisodeOfCarePayload, error) { - return &domain.EpisodeOfCarePayload{ - TotalVisits: 5, - }, nil - }, - FindPatientsByMSISDNFn: func(ctx context.Context, msisdn string) (*domain.PatientConnection, error) { - return &domain.PatientConnection{ - Edges: []*domain.PatientEdge{}, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: true, - HasPreviousPage: true, - }, - }, nil - }, - } -} - -//ProblemSummary is the ProblemSummary mock -func (p *ClinicalMock) ProblemSummary(ctx context.Context, patientID string) ([]string, error) { - return p.ProblemSummaryFn(ctx, patientID) -} - -// VisitSummary is the VisitSummary mock -func (p *ClinicalMock) VisitSummary(ctx context.Context, encounterID string, count int) (map[string]interface{}, error) { - return p.VisitSummaryFn(ctx, encounterID, count) -} - -// PatientTimelineWithCount is the PatientTimelineWithCount mock -func (p *ClinicalMock) PatientTimelineWithCount(ctx context.Context, episodeID string, count int) ([]map[string]interface{}, error) { - return p.PatientTimelineWithCountFn(ctx, episodeID, count) -} - -// ContactsToContactPointInput is the ContactsToContactPointInput mock -func (p *ClinicalMock) ContactsToContactPointInput(ctx context.Context, phones []*domain.PhoneNumberInput, emails []*domain.EmailInput) ([]*domain.FHIRContactPointInput, error) { - return p.ContactsToContactPointInputFn(ctx, phones, emails) -} - -// RegisterPatient is the RegisterPatient mock -func (p *ClinicalMock) RegisterPatient(ctx context.Context, input domain.SimplePatientRegistrationInput) (*domain.PatientPayload, error) { - return p.RegisterPatientFn(ctx, input) -} - -// CreatePatient is the CreatePatient mock -func (p *ClinicalMock) CreatePatient(ctx context.Context, input domain.FHIRPatientInput) (*domain.PatientPayload, error) { - return p.CreatePatientFn(ctx, input) -} - -// FindPatientByID is the FindPatientByID mock -func (p *ClinicalMock) FindPatientByID(ctx context.Context, id string) (*domain.PatientPayload, error) { - return p.FindPatientByIDFn(ctx, id) -} - -// PatientSearch initializes PatientSearch mock -func (p *ClinicalMock) PatientSearch(ctx context.Context, search string) (*domain.PatientConnection, error) { - return p.PatientSearchFn(ctx, search) -} - -// UpdatePatient initializes UpdatePatient mock -func (p *ClinicalMock) UpdatePatient(ctx context.Context, input domain.SimplePatientRegistrationInput) (*domain.PatientPayload, error) { - return p.UpdatePatientFn(ctx, input) -} - -// AddNextOfKin initializes AddNextOfKin mock -func (p *ClinicalMock) AddNextOfKin(ctx context.Context, input domain.SimpleNextOfKinInput) (*domain.PatientPayload, error) { - return p.AddNextOfKinFn(ctx, input) -} - -// AddNHIF initializes AddNHIF mock -func (p *ClinicalMock) AddNHIF(ctx context.Context, input *domain.SimpleNHIFInput) (*domain.PatientPayload, error) { - return p.AddNHIFFn(ctx, input) -} - -// RegisterUser initializes RegisterUser mocks -func (p *ClinicalMock) RegisterUser(ctx context.Context, input domain.SimplePatientRegistrationInput) (*domain.PatientPayload, error) { - return p.RegisterUserFn(ctx, input) -} - -// CreateUpdatePatientExtraInformation initializes CreateUpdatePatientExtraInformation mock -func (p *ClinicalMock) CreateUpdatePatientExtraInformation(ctx context.Context, input domain.PatientExtraInformationInput) (bool, error) { - return p.CreateUpdatePatientExtraInformationFn(ctx, input) -} - -// AllergySummary is the AllergySummary mock initializer -func (p *ClinicalMock) AllergySummary(ctx context.Context, patientID string) ([]string, error) { - return p.AllergySummaryFn(ctx, patientID) -} - -// DeleteFHIRPatientByPhone initializes DeleteFHIRPatientByPhone mock -func (p *ClinicalMock) DeleteFHIRPatientByPhone(ctx context.Context, phoneNumber string) (bool, error) { - return p.DeleteFHIRPatientByPhoneFn(ctx, phoneNumber) -} - -// StartEpisodeByBreakGlass initializes StartEpisodeByBreakGlass mock -func (p *ClinicalMock) StartEpisodeByBreakGlass(ctx context.Context, input domain.BreakGlassEpisodeCreationInput) (*domain.EpisodeOfCarePayload, error) { - return p.StartEpisodeByBreakGlassFn(ctx, input) -} - -// FindPatientsByMSISDN initializes finds a patient's record(s), given a search term FindPatientsByMSISDN mock -func (p *ClinicalMock) FindPatientsByMSISDN(ctx context.Context, msisdn string) (*domain.PatientConnection, error) { - return p.FindPatientsByMSISDNFn(ctx, msisdn) -} diff --git a/pkg/clinical/usecases/mock/ocl_mock.go b/pkg/clinical/usecases/ocl/mock/mock.go similarity index 100% rename from pkg/clinical/usecases/mock/ocl_mock.go rename to pkg/clinical/usecases/ocl/mock/mock.go diff --git a/pkg/clinical/usecases/usecases.go b/pkg/clinical/usecases/usecases.go index 83e47c00..e0eac7f8 100644 --- a/pkg/clinical/usecases/usecases.go +++ b/pkg/clinical/usecases/usecases.go @@ -3,7 +3,6 @@ package usecases import ( "github.com/savannahghi/clinical/pkg/clinical/infrastructure" clinicalUsecase "github.com/savannahghi/clinical/pkg/clinical/usecases/clinical" - fhirUsecase "github.com/savannahghi/clinical/pkg/clinical/usecases/fhir" "github.com/savannahghi/clinical/pkg/clinical/usecases/ocl" ) @@ -11,7 +10,6 @@ import ( type Interactor struct { infra infrastructure.Infrastructure clinicalUsecase.UseCasesClinical - fhirUsecase.UseCasesFHIR ocl.UseCasesOCL } @@ -20,13 +18,11 @@ func NewUsecasesInteractor( infrastructure infrastructure.Infrastructure, ) Interactor { clinical := clinicalUsecase.NewUseCasesClinicalImpl(infrastructure) - fhir := fhirUsecase.NewUseCasesFHIRImpl(infrastructure) ocl := ocl.NewUseCasesOCLImpl(infrastructure) impl := Interactor{ infrastructure, clinical, - fhir, ocl, }