diff --git a/internal/integration/allergancytoleran_integration.go b/internal/integration/allergancytoleran_integration.go index 70d078d..345ce3e 100644 --- a/internal/integration/allergancytoleran_integration.go +++ b/internal/integration/allergancytoleran_integration.go @@ -2,6 +2,7 @@ package integration import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -10,6 +11,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type AllergancyToleranInterface interface { @@ -37,18 +39,15 @@ func (a *AllergancyToleranRepository) GetAllergytoleranByPatient(id string) (map if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: a.akses.ClientId, - ClientSecret: a.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(a.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(a.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } - request.Header.Add("Authorization", "Bearer "+token.AccessToken) + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) @@ -131,19 +130,15 @@ func (a *AllergancyToleranRepository) CreateAllergancyToleran(req model.Allergan return nil, err } - oauth := model.OauthRequest{ - ClientId: a.akses.ClientId, - ClientSecret: a.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(a.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(a.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Patient.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } - request.Header.Add("Authorization", "Bearer "+token.AccessToken) + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) @@ -184,15 +179,12 @@ func (a *AllergancyToleranRepository) UpdateAllergancyToleran(req model.Allergan // return nil, err // } - oauth := model.OauthRequest{ - ClientId: a.akses.ClientId, - ClientSecret: a.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(a.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(a.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Patient.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -201,7 +193,7 @@ func (a *AllergancyToleranRepository) UpdateAllergancyToleran(req model.Allergan Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } diff --git a/internal/integration/careplan_integration.go b/internal/integration/careplan_integration.go index bb93025..6fa81fc 100644 --- a/internal/integration/careplan_integration.go +++ b/internal/integration/careplan_integration.go @@ -1,6 +1,7 @@ package integration import ( + "context" "encoding/json" "errors" "fmt" @@ -8,6 +9,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type CarePlanInterface interface { @@ -35,18 +37,15 @@ func (c *CarePlanRepository) GetCareplanByPatient(id string) (map[string]interfa if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } - request.Header.Add("Authorization", "Bearer "+token.AccessToken) + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) @@ -113,15 +112,12 @@ func (c *CarePlanRepository) CreateCarePlan(req model.CarePlanRequest) (map[stri // return nil, err // } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -130,7 +126,7 @@ func (c *CarePlanRepository) CreateCarePlan(req model.CarePlanRequest) (map[stri Method: "POST", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } @@ -153,15 +149,12 @@ func (c *CarePlanRepository) UpdateCarePlan(req model.CarePlanRequest) (map[stri return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -170,7 +163,7 @@ func (c *CarePlanRepository) UpdateCarePlan(req model.CarePlanRequest) (map[stri Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } diff --git a/internal/integration/clinicalImpression_integration.go b/internal/integration/clinicalImpression_integration.go index feba396..424416c 100644 --- a/internal/integration/clinicalImpression_integration.go +++ b/internal/integration/clinicalImpression_integration.go @@ -2,6 +2,7 @@ package integration import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -9,6 +10,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type ClinicalImppressionInterface interface { @@ -34,18 +36,15 @@ func (c *ClinicalImpressionRepository) GetClinicalImpressionByPatient(id string) if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } - request.Header.Add("Authorization", "Bearer "+token.AccessToken) + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) res, err := client.Do(request) @@ -186,23 +185,15 @@ func (c *ClinicalImpressionRepository) CreateClinicalImpression(req model.Clinic return nil, err } - // Assuming the access token is stored in a field of the akses struct - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(c.akses) - token, err := OauthInterface.GenerateToken(oauth) - + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err - } - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", "application/json") @@ -300,15 +291,12 @@ func (c *ClinicalImpressionRepository) UpdateClinicalImpression(req model.Clinic } } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -317,7 +305,7 @@ func (c *ClinicalImpressionRepository) UpdateClinicalImpression(req model.Clinic Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, }) } diff --git a/internal/integration/composition_integration.go b/internal/integration/composition_integration.go index 911f32e..bf88845 100644 --- a/internal/integration/composition_integration.go +++ b/internal/integration/composition_integration.go @@ -1,11 +1,13 @@ package integration import ( + "context" "errors" "os" "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type CompositionInterface interface { @@ -478,32 +480,21 @@ func (c *CompositionRepository) CreateComposition(req model.CompositionRequest) req.Medikamentosa = "" req.LanjutanPenatalaksanaan = "" - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } - // b, err := json.MarshalIndent(req, "", " ") - // if err != nil { - // log.Println("error marshal:", err) - // } else { - // log.Println(string(b)) - // } - url := c.akses.BaseUrl + "/Composition" return httputil.DoRequest(httputil.RequestOption{ Method: "POST", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, }) } @@ -532,16 +523,12 @@ func (c *CompositionRepository) UpdateComposition(req model.CompositionRequest) return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } url := c.akses.BaseUrl + "/Composition/" + req.Id @@ -549,7 +536,7 @@ func (c *CompositionRepository) UpdateComposition(req model.CompositionRequest) Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, }) } diff --git a/internal/integration/condition_integration.go b/internal/integration/condition_integration.go index 62fe098..df8aa22 100644 --- a/internal/integration/condition_integration.go +++ b/internal/integration/condition_integration.go @@ -2,6 +2,7 @@ package integration import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -9,6 +10,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type ConditionInterface interface { @@ -105,21 +107,15 @@ func (c *ConditionRepository) CreateCondition(req model.ConditionRequest) (map[s if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(c.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) res, err := client.Do(request) if err != nil { @@ -147,20 +143,15 @@ func (c *ConditionRepository) GetConditionByPatient(id string) (map[string]inter if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(c.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) res, err := client.Do(request) if err != nil { @@ -207,15 +198,12 @@ func (c *ConditionRepository) UpdateCondition(req model.ConditionRequest) (map[s } } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -224,7 +212,7 @@ func (c *ConditionRepository) UpdateCondition(req model.ConditionRequest) (map[s Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } diff --git a/internal/integration/diagnosisreport_integration.go b/internal/integration/diagnosisreport_integration.go index 6e8937a..85c3d3e 100644 --- a/internal/integration/diagnosisreport_integration.go +++ b/internal/integration/diagnosisreport_integration.go @@ -2,6 +2,7 @@ package integration import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -10,6 +11,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" "strings" ) @@ -38,18 +40,15 @@ func (d *DiagnosisReportRepository) GetDiagnosisReportByPatientCategory(id strin if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: d.akses.ClientId, - ClientSecret: d.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(d.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(d.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token != nil { - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Set("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) res, err := client.Do(request) if err != nil { @@ -144,20 +143,15 @@ func (d *DiagnosisReportRepository) CreateDiagnosisReport(req model.DiagnosticRe if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: d.akses.ClientId, - ClientSecret: d.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(d.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(d.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", "application/json") response, err := client.Do(request) @@ -209,15 +203,12 @@ func (d *DiagnosisReportRepository) UpdateDiagnosisReport(req model.DiagnosticRe } //Setup BasedOn - oauth := model.OauthRequest{ - ClientId: d.akses.ClientId, - ClientSecret: d.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(d.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(d.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -226,7 +217,7 @@ func (d *DiagnosisReportRepository) UpdateDiagnosisReport(req model.DiagnosticRe Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, }) } diff --git a/internal/integration/encounter_integration.go b/internal/integration/encounter_integration.go index 57ea764..5742121 100644 --- a/internal/integration/encounter_integration.go +++ b/internal/integration/encounter_integration.go @@ -2,6 +2,7 @@ package integration import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -10,6 +11,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" "time" ) @@ -75,20 +77,15 @@ func (e *EncounterRepository) GetEncounterByPatient(id string) (map[string]inter if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: e.akses.ClientId, - ClientSecret: e.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(e.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(e.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) res, err := client.Do(request) if err != nil { @@ -138,21 +135,15 @@ func (e *EncounterRepository) CreateEncounter(req model.EncounterRequest) (map[s if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: e.akses.ClientId, - ClientSecret: e.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(e.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(e.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } - + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) @@ -172,15 +163,12 @@ func (e *EncounterRepository) CreateEncounter(req model.EncounterRequest) (map[s // UpdateEncounter implements EncounterInterface. func (e *EncounterRepository) UpdateEncounter(req model.EncounterUpdateRequest) (map[string]interface{}, error) { - oauth := model.OauthRequest{ - ClientId: e.akses.ClientId, - ClientSecret: e.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(e.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(e.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), "") if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -189,7 +177,7 @@ func (e *EncounterRepository) UpdateEncounter(req model.EncounterUpdateRequest) Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } diff --git a/internal/integration/episodeofcare_integration.go b/internal/integration/episodeofcare_integration.go index d9729c9..1190aca 100644 --- a/internal/integration/episodeofcare_integration.go +++ b/internal/integration/episodeofcare_integration.go @@ -2,6 +2,7 @@ package integration import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -10,6 +11,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type EpisodeOfCareInterface interface { @@ -89,16 +91,15 @@ func (e *EpisodeOfCareRepository) CreateEpisodeOfCare(req model.EpisodeOfCareReq if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: e.akses.ClientId, - ClientSecret: e.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(e.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(e.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Patient.Reference) if err != nil { return nil, err } - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) + } + request.Header.Set("Authorization", "Bearer "+token) request.Header.Set("Content-Type", "application/json") response, err := client.Do(request) if err != nil { @@ -152,16 +153,15 @@ func (e *EpisodeOfCareRepository) GetEpisodeOfCareByPatient(id string) (map[stri return nil, err } - oauth := model.OauthRequest{ - ClientId: e.akses.ClientId, - ClientSecret: e.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(e.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(e.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) + } + request.Header.Set("Authorization", "Bearer "+token) response, err := client.Do(request) if err != nil { @@ -252,15 +252,12 @@ func (e *EpisodeOfCareRepository) UpdateEpisodeOfCare(req model.EpisodeOfCareReq // } // Setup Type - oauth := model.OauthRequest{ - ClientId: e.akses.ClientId, - ClientSecret: e.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(e.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(e.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Patient.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -269,7 +266,7 @@ func (e *EpisodeOfCareRepository) UpdateEpisodeOfCare(req model.EpisodeOfCareReq Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, }) } func (e *EpisodeOfCareRepository) setupCondition(patient string) string { diff --git a/internal/integration/goal_integration.go b/internal/integration/goal_integration.go index 94322f5..309507f 100644 --- a/internal/integration/goal_integration.go +++ b/internal/integration/goal_integration.go @@ -1,6 +1,7 @@ package integration import ( + "context" "encoding/json" "errors" "fmt" @@ -8,6 +9,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type GoalInterface interface { @@ -35,18 +37,15 @@ func (c *GoalRepository) GetGoalByPatient(id string) (map[string]interface{}, er if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } - request.Header.Add("Authorization", "Bearer "+token.AccessToken) + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) res, err := client.Do(request) @@ -107,15 +106,12 @@ func (c *GoalRepository) CreateGoal(req model.GoalRequest) (map[string]interface // return nil, err // } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -125,7 +121,7 @@ func (c *GoalRepository) CreateGoal(req model.GoalRequest) (map[string]interface Method: "POST", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) if err != nil { @@ -165,15 +161,12 @@ func (c *GoalRepository) UpdateGoal(req model.GoalRequest) (map[string]interface // return nil, err // } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -182,7 +175,7 @@ func (c *GoalRepository) UpdateGoal(req model.GoalRequest) (map[string]interface Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } diff --git a/internal/integration/imagingstudy_integration.go b/internal/integration/imagingstudy_integration.go index a198c4c..5d90907 100644 --- a/internal/integration/imagingstudy_integration.go +++ b/internal/integration/imagingstudy_integration.go @@ -1,6 +1,7 @@ package integration import ( + "context" "encoding/json" "errors" "fmt" @@ -9,6 +10,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type ImagingStudyInterface interface { @@ -42,18 +44,15 @@ func (c *ImagingStudyRepository) GetImagingStudyByPatient(id string) (map[string if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } - request.Header.Add("Authorization", "Bearer "+token.AccessToken) + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) res, err := client.Do(request) @@ -139,15 +138,12 @@ func (c *ImagingStudyRepository) CreateImagingStudy(req model.ImagingStudyReques return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -156,7 +152,7 @@ func (c *ImagingStudyRepository) CreateImagingStudy(req model.ImagingStudyReques Method: "POST", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) if err != nil { @@ -226,15 +222,12 @@ func (c *ImagingStudyRepository) UpdateImagingStudy(req model.ImagingStudyReques return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -243,7 +236,7 @@ func (c *ImagingStudyRepository) UpdateImagingStudy(req model.ImagingStudyReques Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } diff --git a/internal/integration/immunization_integration.go b/internal/integration/immunization_integration.go index 8d0fdd7..ca50f6e 100644 --- a/internal/integration/immunization_integration.go +++ b/internal/integration/immunization_integration.go @@ -1,11 +1,13 @@ package integration import ( + "context" "errors" "fmt" "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type ImmunizationInterface interface { @@ -41,15 +43,12 @@ func (c *ImmunizationRepository) CreateImmunization(req model.ImmunizationReques return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Patient.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -58,7 +57,7 @@ func (c *ImmunizationRepository) CreateImmunization(req model.ImmunizationReques Method: "POST", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } @@ -76,15 +75,12 @@ func (c *ImmunizationRepository) UpdateImmunization(req model.ImmunizationReques return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Patient.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -93,7 +89,7 @@ func (c *ImmunizationRepository) UpdateImmunization(req model.ImmunizationReques Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } diff --git a/internal/integration/medicationdispense_integration.go b/internal/integration/medicationdispense_integration.go index 04dde64..ef564b5 100644 --- a/internal/integration/medicationdispense_integration.go +++ b/internal/integration/medicationdispense_integration.go @@ -1,6 +1,7 @@ package integration import ( + "context" "encoding/json" "errors" "fmt" @@ -9,6 +10,7 @@ import ( "satusehat-rssa/internal/model" "satusehat-rssa/pkg/common" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" "strings" ) @@ -43,18 +45,15 @@ func (c *MedicationDispenseRepository) GetMedicationDispenseByPatient(id string, if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } - request.Header.Add("Authorization", "Bearer "+token.AccessToken) + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) res, err := client.Do(request) @@ -120,15 +119,12 @@ func (c *MedicationDispenseRepository) CreateMedicationDispense(req model.Medica // return nil, err // } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -137,7 +133,7 @@ func (c *MedicationDispenseRepository) CreateMedicationDispense(req model.Medica Method: "POST", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } @@ -164,15 +160,12 @@ func (c *MedicationDispenseRepository) UpdateMedicationDispense(req model.Medica // return nil, err // } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -181,7 +174,7 @@ func (c *MedicationDispenseRepository) UpdateMedicationDispense(req model.Medica Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } diff --git a/internal/integration/medicationrequest_integration.go b/internal/integration/medicationrequest_integration.go index e1601cd..77daa80 100644 --- a/internal/integration/medicationrequest_integration.go +++ b/internal/integration/medicationrequest_integration.go @@ -1,6 +1,7 @@ package integration import ( + "context" "encoding/json" "errors" "fmt" @@ -10,6 +11,7 @@ import ( "satusehat-rssa/internal/model" "satusehat-rssa/pkg/common" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type MedicationRequestInterface interface { @@ -43,18 +45,15 @@ func (c *MedicationRequestRepository) GetMedicationRequestByPatient(id string, c if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } - request.Header.Add("Authorization", "Bearer "+token.AccessToken) + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) res, err := client.Do(request) @@ -127,15 +126,12 @@ func (c *MedicationRequestRepository) CreateMedicationRequest(req model.Medicati // return nil, err // } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -144,7 +140,7 @@ func (c *MedicationRequestRepository) CreateMedicationRequest(req model.Medicati Method: "POST", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } @@ -171,15 +167,12 @@ func (c *MedicationRequestRepository) UpdateMedicationRequest(req model.Medicati // return nil, err // } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -188,7 +181,7 @@ func (c *MedicationRequestRepository) UpdateMedicationRequest(req model.Medicati Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } diff --git a/internal/integration/medicationstatement_integration.go b/internal/integration/medicationstatement_integration.go index 69ede4f..9f8f1e8 100644 --- a/internal/integration/medicationstatement_integration.go +++ b/internal/integration/medicationstatement_integration.go @@ -1,12 +1,14 @@ package integration import ( + "context" "errors" "fmt" "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/common" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type MedicationStatementInterface interface { @@ -54,15 +56,12 @@ func (c *MedicationStatementRepository) CreateMedicationStatement(req model.Medi return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -71,7 +70,7 @@ func (c *MedicationStatementRepository) CreateMedicationStatement(req model.Medi Method: "POST", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } @@ -103,15 +102,12 @@ func (c *MedicationStatementRepository) UpdateMedicationStatement(req model.Medi return nil, err } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -120,7 +116,7 @@ func (c *MedicationStatementRepository) UpdateMedicationStatement(req model.Medi Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } diff --git a/internal/integration/medicine_integration.go b/internal/integration/medicine_integration.go index 14a743e..4b70cc6 100644 --- a/internal/integration/medicine_integration.go +++ b/internal/integration/medicine_integration.go @@ -1,6 +1,7 @@ package integration import ( + "context" "encoding/json" "errors" "net/http" @@ -8,6 +9,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" "strconv" ) @@ -29,21 +31,15 @@ func (m *MedicineKfaRepository) GetMedicineByKfaCode(kfaCode string) (map[string client := &http.Client{} request, err := http.NewRequest(method, url, nil) - // Assuming the access token is stored in a field of the akses struct - oauth := model.OauthRequest{ - ClientId: m.akses.ClientId, - ClientSecret: m.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(m.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(m.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), "") if err != nil { return nil, err } - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", "application/json") q := request.URL.Query() @@ -95,21 +91,20 @@ func (m *MedicineKfaRepository) MedicationCreate(req model.MedicationRequest) (m url := m.akses.BaseUrl + "/Medication" - oauth := model.OauthRequest{ - ClientId: m.akses.ClientId, - ClientSecret: m.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(m.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(m.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), "") if err != nil { return nil, err } + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) + } data, err := httputil.DoRequest(httputil.RequestOption{ Method: "POST", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) if err != nil { @@ -128,23 +123,15 @@ func (m *MedicineKfaRepository) GetMedicineKfa(req model.MedicineKfaRequest) ([] client := &http.Client{} request, err := http.NewRequest(method, url, nil) - // Assuming the access token is stored in a field of the akses struct - oauth := model.OauthRequest{ - ClientId: m.akses.ClientId, - ClientSecret: m.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(m.akses) - token, err := OauthInterface.GenerateToken(oauth) - + redisRepo := redis.NewRedisAuth(m.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), "") if err != nil { return nil, err - } - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", "application/json") diff --git a/internal/integration/observation_intergration.go b/internal/integration/observation_intergration.go index 17c7132..4ab4401 100644 --- a/internal/integration/observation_intergration.go +++ b/internal/integration/observation_intergration.go @@ -2,6 +2,7 @@ package integration import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -9,6 +10,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type ObservationInterface interface { @@ -36,18 +38,15 @@ func (o *ObservationRepository) GetObservationByPatientCategory(id string, categ if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: o.akses.ClientId, - ClientSecret: o.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(o.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(o.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token != nil { - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Set("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) res, err := client.Do(request) if err != nil { @@ -127,20 +126,15 @@ func (o *ObservationRepository) GetObservationByPatient(id string) (map[string]i if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: o.akses.ClientId, - ClientSecret: o.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(o.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(o.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) res, err := client.Do(request) if err != nil { @@ -239,18 +233,15 @@ func (o *ObservationRepository) CreateObservation(req model.ObservationRequest) return nil, err } - oauth := model.OauthRequest{ - ClientId: o.akses.ClientId, - ClientSecret: o.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(o.akses) - NewOauthRequestRepo(o.akses) - token, err := OauthInterface.GenerateToken(oauth) - + redisRepo := redis.NewRedisAuth(o.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) + } + request.Header.Set("Authorization", "Bearer "+token) request.Header.Set("Content-Type", "application/json") response, err := client.Do(request) if err != nil { @@ -318,15 +309,12 @@ func (o *ObservationRepository) UpdateObservation(req model.ObservationRequest) } } - oauth := model.OauthRequest{ - ClientId: o.akses.ClientId, - ClientSecret: o.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(o.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(o.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -335,7 +323,7 @@ func (o *ObservationRepository) UpdateObservation(req model.ObservationRequest) Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, }) } diff --git a/internal/integration/organization_integration.go b/internal/integration/organization_integration.go index ea5b436..2522e25 100644 --- a/internal/integration/organization_integration.go +++ b/internal/integration/organization_integration.go @@ -2,11 +2,13 @@ package integration import ( "bytes" + "context" "encoding/json" "errors" "net/http" "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" + "satusehat-rssa/pkg/redis" ) type OrganizationInterface interface { @@ -39,17 +41,16 @@ func (o *OrganizationRepository) CreateOrganization(req model.OrganizationReques return nil, err } - oauth := model.OauthRequest{ - ClientId: o.akses.ClientId, - ClientSecret: o.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(o.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(o.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), "") if err != nil { return nil, err } + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) + } - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + request.Header.Set("Authorization", "Bearer "+token) request.Header.Set("Content-Type", "application/json") response, err := client.Do(request) @@ -77,17 +78,16 @@ func (o *OrganizationRepository) GetOrganizationPatient(id string) (map[string]i return nil, err } - oauth := model.OauthRequest{ - ClientId: o.akses.ClientId, - ClientSecret: o.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(o.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(o.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) + } - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + request.Header.Set("Authorization", "Bearer "+token) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) response, err := client.Do(request) @@ -120,17 +120,16 @@ func (o *OrganizationRepository) HandleCheckOrganization(id string) (string, boo return "", false, err } - oauth := model.OauthRequest{ - ClientId: o.akses.ClientId, - ClientSecret: o.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(o.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(o.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), "") if err != nil { return "", false, err } + if token == "" { + return "", false, errors.New(constant.ErrGenerateToken) + } - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + request.Header.Set("Authorization", "Bearer "+token) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) response, err := client.Do(request) diff --git a/internal/integration/patient_integration.go b/internal/integration/patient_integration.go index 82f17a1..e6cf624 100644 --- a/internal/integration/patient_integration.go +++ b/internal/integration/patient_integration.go @@ -2,11 +2,13 @@ package integration import ( "bytes" + "context" "encoding/json" "errors" "net/http" "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" + "satusehat-rssa/pkg/redis" ) type PatientInterface interface { @@ -64,21 +66,15 @@ func (p *PatientRepository) CreataPatient(req model.PatientRequest) (*map[string if err != nil { return nil, err } - // Assuming the access token is stored in a field of the akses struct - oauth := model.OauthRequest{ - ClientId: p.akses.ClientId, - ClientSecret: p.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(p.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(p.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), "") if err != nil { return nil, err } - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) res, err := client.Do(request) @@ -107,22 +103,15 @@ func (p *PatientRepository) GetPatientByNIK(identifier string) (*map[string]inte if err != nil { return nil, err } - // Assuming the access token is stored in a field of the akses struct - oauth := model.OauthRequest{ - ClientId: p.akses.ClientId, - ClientSecret: p.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(p.akses) - token, err := OauthInterface.GenerateToken(oauth) - + redisRepo := redis.NewRedisAuth(p.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), "") if err != nil { return nil, err } - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) diff --git a/internal/integration/practitioner_integration.go b/internal/integration/practitioner_integration.go index f877e98..893da6e 100644 --- a/internal/integration/practitioner_integration.go +++ b/internal/integration/practitioner_integration.go @@ -1,11 +1,13 @@ package integration import ( + "context" "encoding/json" "errors" "net/http" "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" + "satusehat-rssa/pkg/redis" ) type PracticionerInterface interface { @@ -73,20 +75,15 @@ func (p *PracticionerRepository) GetPracticionerByNIK(nik string) (*map[string]i return nil, err } - oauth := model.OauthRequest{ - ClientId: p.akses.ClientId, - ClientSecret: p.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(p.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(p.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), "") if err != nil { return nil, err } - if token != nil { - request.Header.Add("Authorization", "Bearer "+token.AccessToken) - } else { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Add("Authorization", "Bearer "+token) request.Header.Set("Accept", constant.ContentTypeFHIRJSON) diff --git a/internal/integration/procedure_integration.go b/internal/integration/procedure_integration.go index 68ede61..85b0791 100644 --- a/internal/integration/procedure_integration.go +++ b/internal/integration/procedure_integration.go @@ -1,12 +1,14 @@ package integration import ( + "context" "encoding/json" "errors" "net/http" "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" "strings" ) @@ -29,23 +31,19 @@ func (p *ProcedureRepository) GetProcedureByPatient(id string) (map[string]inter method := "GET" client := &http.Client{} - oauth := model.OauthRequest{ - ClientId: p.akses.ClientId, - ClientSecret: p.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(p.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(p.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } request, err := http.NewRequest(method, url, nil) if err != nil { return nil, err } - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + request.Header.Set("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) res, err := client.Do(request) if err != nil { @@ -106,16 +104,12 @@ func (p *ProcedureRepository) CreateProcedure(req model.ProcedureRequest) (map[s return nil, err } - oauth := model.OauthRequest{ - ClientId: p.akses.ClientId, - ClientSecret: p.akses.ClientSecret, - } - - token, err := NewOauthRequestRepo(p.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(p.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -125,7 +119,7 @@ func (p *ProcedureRepository) CreateProcedure(req model.ProcedureRequest) (map[s Method: "POST", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, }) } @@ -152,16 +146,12 @@ func (p *ProcedureRepository) UpdateProcedure(req model.ProcedureRequest) (map[s return nil, err } - oauth := model.OauthRequest{ - ClientId: p.akses.ClientId, - ClientSecret: p.akses.ClientSecret, - } - - token, err := NewOauthRequestRepo(p.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(p.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -170,7 +160,7 @@ func (p *ProcedureRepository) UpdateProcedure(req model.ProcedureRequest) (map[s return httputil.DoRequest(httputil.RequestOption{ Method: "PUT", URL: url, - BearerToken: token.AccessToken, + BearerToken: token, Body: req, }) } diff --git a/internal/integration/questionnaireresponse_integration.go b/internal/integration/questionnaireresponse_integration.go index 2ae75ce..475df8d 100644 --- a/internal/integration/questionnaireresponse_integration.go +++ b/internal/integration/questionnaireresponse_integration.go @@ -1,11 +1,13 @@ package integration import ( + "context" "errors" "fmt" "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type QuestionnaireResponseInterface interface { @@ -49,15 +51,12 @@ func (c *QuestionnaireResponseRepository) CreateQuestionnaireResponse(req model. // return nil, err // } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -66,7 +65,7 @@ func (c *QuestionnaireResponseRepository) CreateQuestionnaireResponse(req model. Method: "POST", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } @@ -94,15 +93,12 @@ func (c *QuestionnaireResponseRepository) UpdateQuestionnaireResponse(req model. // return nil, err // } - oauth := model.OauthRequest{ - ClientId: c.akses.ClientId, - ClientSecret: c.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(c.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(c.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -111,7 +107,7 @@ func (c *QuestionnaireResponseRepository) UpdateQuestionnaireResponse(req model. Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, Headers: httputil.DefaultFHIRHeaders(), }) } diff --git a/internal/integration/servicerequest_integration.go b/internal/integration/servicerequest_integration.go index 230e55f..b285c60 100644 --- a/internal/integration/servicerequest_integration.go +++ b/internal/integration/servicerequest_integration.go @@ -36,18 +36,15 @@ func (s *ServiceRequestRepository) GetServiceRequestByPatientCategory(id string, if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: s.akses.ClientId, - ClientSecret: s.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(s.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(s.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token != nil { - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Set("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) res, err := client.Do(request) if err != nil { @@ -196,15 +193,12 @@ func (s *ServiceRequestRepository) UpdateServiceRequest(req model.ServiceRequest } } - oauth := model.OauthRequest{ - ClientId: s.akses.ClientId, - ClientSecret: s.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(s.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(s.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -213,7 +207,7 @@ func (s *ServiceRequestRepository) UpdateServiceRequest(req model.ServiceRequest Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, }) } @@ -228,18 +222,15 @@ func (s *ServiceRequestRepository) GetServiceRequestByPatient(id string) (map[st if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: s.akses.ClientId, - ClientSecret: s.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(s.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(s.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token != nil { - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Set("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) res, err := client.Do(request) diff --git a/internal/integration/specimen_integration.go b/internal/integration/specimen_integration.go index 1a38ceb..c99ea3d 100644 --- a/internal/integration/specimen_integration.go +++ b/internal/integration/specimen_integration.go @@ -2,6 +2,7 @@ package integration import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -10,6 +11,7 @@ import ( "satusehat-rssa/internal/constant" "satusehat-rssa/internal/model" "satusehat-rssa/pkg/httputil" + "satusehat-rssa/pkg/redis" ) type SpecimenInterface interface { @@ -38,18 +40,15 @@ func (s *SpecimenRepository) GetSpecimenByPatientCategory(id string, category st return nil, err } - oauth := model.OauthRequest{ - ClientId: s.akses.ClientId, - ClientSecret: s.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(s.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(s.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token != nil { - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Set("Authorization", "Bearer "+token) request.Header.Set("Content-Type", constant.ContentTypeFHIRJSON) res, err := client.Do(request) if err != nil { @@ -138,18 +137,15 @@ func (s *SpecimenRepository) CreateSpecimen(req model.SpecimenRequest) (map[stri request.Header.Set("Content-Type", "application/json") - oauth := model.OauthRequest{ - ClientId: s.akses.ClientId, - ClientSecret: s.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(s.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(s.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token != nil { - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Set("Authorization", "Bearer "+token) response, err := client.Do(request) if err != nil { @@ -192,18 +188,15 @@ func (s *SpecimenRepository) GetSpecimenByPatient(id string) (map[string]interfa if err != nil { return nil, err } - oauth := model.OauthRequest{ - ClientId: s.akses.ClientId, - ClientSecret: s.akses.ClientSecret, - } - OauthInterface := NewOauthRequestRepo(s.akses) - token, err := OauthInterface.GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(s.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), id) if err != nil { return nil, err } - if token != nil { - request.Header.Set("Authorization", "Bearer "+token.AccessToken) + if token == "" { + return nil, errors.New(constant.ErrGenerateToken) } + request.Header.Set("Authorization", "Bearer "+token) response, err := client.Do(request) if err != nil { @@ -323,15 +316,12 @@ func (s *SpecimenRepository) UpdateSpecimen(req model.SpecimenRequest) (map[stri return nil, err } - oauth := model.OauthRequest{ - ClientId: s.akses.ClientId, - ClientSecret: s.akses.ClientSecret, - } - token, err := NewOauthRequestRepo(s.akses).GenerateToken(oauth) + redisRepo := redis.NewRedisAuth(s.akses) + token, err := redisRepo.GetOrCreateTokenSS(context.Background(), req.Subject.Reference) if err != nil { return nil, err } - if token == nil { + if token == "" { return nil, errors.New(constant.ErrGenerateToken) } @@ -340,7 +330,7 @@ func (s *SpecimenRepository) UpdateSpecimen(req model.SpecimenRequest) (map[stri Method: "PUT", URL: url, Body: req, - BearerToken: token.AccessToken, + BearerToken: token, }) } diff --git a/pkg/redis/redis-auth.go b/pkg/redis/redis-auth.go index 29be1b9..14a9595 100644 --- a/pkg/redis/redis-auth.go +++ b/pkg/redis/redis-auth.go @@ -33,44 +33,45 @@ func (s *RedisAkses) GetOrCreateTokenSS(ctx context.Context, nik string) (string // 1️⃣ ambil dari redis token, err := s.akses.Redis.Get(ctx, redisKey).Result() - if err == nil && token != "" { + if err != nil && err != redis.Nil { + return "", err + } + + // 2️⃣ optional validation: only when nik provided, verify token masih valid + if token != "" && nik != "" { code, err = s.GetPatientByNIK(nik, token) if err != nil { return "", err } } - - // redis error selain key not found - if err != nil && err != redis.Nil { - return "", err - } if code == "invalid-access-token" || token == "" { // hapus token dari redis if err := s.akses.Redis.Del(ctx, redisKey).Err(); err != nil { return "", err } - // 2️⃣ generate token baru - oauth := model.OauthRequest{ - ClientId: s.akses.ClientId, - ClientSecret: s.akses.ClientSecret, - } + // 3️⃣ generate token baru + oauth := model.OauthRequest{ + ClientId: s.akses.ClientId, + ClientSecret: s.akses.ClientSecret, + } - obj_token, err := s.GenerateToken(oauth) - if err != nil { - return "", err - } + obj_token, err := s.GenerateToken(oauth) + if err != nil { + return "", err + } + if obj_token == nil || obj_token.AccessToken == "" { + return "", errors.New(constant.ErrGenerateToken) + } - // 3️⃣ simpan ke redis (opsional TTL) - if err := s.akses.Redis.Set(ctx, redisKey, obj_token.AccessToken, 0).Err(); err != nil { - return "", err - } + // 4️⃣ simpan ke redis (opsional TTL) + if err := s.akses.Redis.Set(ctx, redisKey, obj_token.AccessToken, 0).Err(); err != nil { + return "", err + } - return obj_token.AccessToken, nil - }else{ - return token, nil + return obj_token.AccessToken, nil } - + return token, nil } func (o *RedisAkses) GenerateToken(req model.OauthRequest) (*model.OauthResponse, error) {