From 61cb32afcc17c11dd5a4ac4f5ae7d6b8788ad735 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Tue, 9 Sep 2025 13:50:37 +0700 Subject: [PATCH] adjust adime and sbar case --- internal/domain/main-entities/adime/dto.go | 6 ++++- internal/domain/main-entities/sbar/dto.go | 6 ++++- .../interface/main-handler/adime/handler.go | 9 ++++++++ .../interface/main-handler/sbar/handler.go | 9 ++++++++ internal/use-case/main-use-case/adime/case.go | 22 ++++++++++++++++++- internal/use-case/main-use-case/sbar/case.go | 22 ++++++++++++++++++- 6 files changed, 70 insertions(+), 4 deletions(-) diff --git a/internal/domain/main-entities/adime/dto.go b/internal/domain/main-entities/adime/dto.go index b11ba182..39c48ab7 100644 --- a/internal/domain/main-entities/adime/dto.go +++ b/internal/domain/main-entities/adime/dto.go @@ -4,14 +4,18 @@ import ( ecore "simrs-vx/internal/domain/base-entities/core" eem "simrs-vx/internal/domain/main-entities/employee" ee "simrs-vx/internal/domain/main-entities/encounter" + + pa "simrs-vx/pkg/auth-helper" "time" ) type CreateDto struct { Encounter_Id *uint `json:"encounter_id"` - Employee_Id *uint `json:"employee_id"` + Employee_Id *uint `json:"-"` Time *time.Time `json:"time"` Value *string `json:"value"` + + pa.AuthInfo } type ReadListDto struct { diff --git a/internal/domain/main-entities/sbar/dto.go b/internal/domain/main-entities/sbar/dto.go index d3c08f21..edba338c 100644 --- a/internal/domain/main-entities/sbar/dto.go +++ b/internal/domain/main-entities/sbar/dto.go @@ -4,14 +4,18 @@ import ( ecore "simrs-vx/internal/domain/base-entities/core" eem "simrs-vx/internal/domain/main-entities/employee" ee "simrs-vx/internal/domain/main-entities/encounter" + + pa "simrs-vx/pkg/auth-helper" "time" ) type CreateDto struct { Encounter_Id *uint `json:"encounter_id"` - Employee_Id *uint `json:"employee_id"` + Employee_Id *uint `json:"-"` Time *time.Time `json:"time"` Value *string `json:"value"` + + pa.AuthInfo } type ReadListDto struct { diff --git a/internal/interface/main-handler/adime/handler.go b/internal/interface/main-handler/adime/handler.go index 929081c7..9eabb0af 100644 --- a/internal/interface/main-handler/adime/handler.go +++ b/internal/interface/main-handler/adime/handler.go @@ -10,6 +10,10 @@ import ( e "simrs-vx/internal/domain/main-entities/adime" u "simrs-vx/internal/use-case/main-use-case/adime" + + pa "simrs-vx/pkg/auth-helper" + + d "github.com/karincake/dodol" ) type myBase struct{} @@ -17,10 +21,15 @@ type myBase struct{} var O myBase func (obj myBase) Create(w http.ResponseWriter, r *http.Request) { + authInfo, err := pa.GetAuthInfo(r) + if err != nil { + rw.WriteJSON(w, http.StatusUnauthorized, d.IS{"message": err.Error()}, nil) + } dto := e.CreateDto{} if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { return } + dto.AuthInfo = *authInfo res, err := u.Create(dto) rw.DataResponse(w, res, err) } diff --git a/internal/interface/main-handler/sbar/handler.go b/internal/interface/main-handler/sbar/handler.go index c67b25a0..7fac1e00 100644 --- a/internal/interface/main-handler/sbar/handler.go +++ b/internal/interface/main-handler/sbar/handler.go @@ -10,6 +10,10 @@ import ( e "simrs-vx/internal/domain/main-entities/sbar" u "simrs-vx/internal/use-case/main-use-case/sbar" + + pa "simrs-vx/pkg/auth-helper" + + d "github.com/karincake/dodol" ) type myBase struct{} @@ -17,10 +21,15 @@ type myBase struct{} var O myBase func (obj myBase) Create(w http.ResponseWriter, r *http.Request) { + authInfo, err := pa.GetAuthInfo(r) + if err != nil { + rw.WriteJSON(w, http.StatusUnauthorized, d.IS{"message": err.Error()}, nil) + } dto := e.CreateDto{} if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { return } + dto.AuthInfo = *authInfo res, err := u.Create(dto) rw.DataResponse(w, res, err) } diff --git a/internal/use-case/main-use-case/adime/case.go b/internal/use-case/main-use-case/adime/case.go index 3a3656a8..3a4c4496 100644 --- a/internal/use-case/main-use-case/adime/case.go +++ b/internal/use-case/main-use-case/adime/case.go @@ -1,9 +1,14 @@ package adime import ( - e "simrs-vx/internal/domain/main-entities/adime" + "errors" "strconv" + e "simrs-vx/internal/domain/main-entities/adime" + ee "simrs-vx/internal/domain/main-entities/employee" + + ue "simrs-vx/internal/use-case/main-use-case/employee" + dg "github.com/karincake/apem/db-gorm-pg" d "github.com/karincake/dodol" @@ -34,6 +39,21 @@ func Create(input e.CreateDto) (*d.Data, error) { return err } + if !input.AuthInfo.IsDoctor() && !input.AuthInfo.IsNurse() { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "auth-forbidden", + Detail: "user position is not allowed", + Raw: errors.New("authentication failed"), + } + return pl.SetLogError(&event, input) + } + + employee, err := ue.ReadDetailData(ee.ReadDetailDto{User_Id: &input.AuthInfo.User_Id}, &event, tx) + if err != nil { + return err + } + input.Employee_Id = &employee.Id if resData, err := CreateData(input, &event, tx); err != nil { return err } else { diff --git a/internal/use-case/main-use-case/sbar/case.go b/internal/use-case/main-use-case/sbar/case.go index dfa36f72..3606bae4 100644 --- a/internal/use-case/main-use-case/sbar/case.go +++ b/internal/use-case/main-use-case/sbar/case.go @@ -1,9 +1,14 @@ package sbar import ( - e "simrs-vx/internal/domain/main-entities/sbar" + "errors" "strconv" + ee "simrs-vx/internal/domain/main-entities/employee" + e "simrs-vx/internal/domain/main-entities/sbar" + + ue "simrs-vx/internal/use-case/main-use-case/employee" + dg "github.com/karincake/apem/db-gorm-pg" d "github.com/karincake/dodol" @@ -34,6 +39,21 @@ func Create(input e.CreateDto) (*d.Data, error) { return err } + if !input.AuthInfo.IsDoctor() && !input.AuthInfo.IsNurse() { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "auth-forbidden", + Detail: "user position is not allowed", + Raw: errors.New("authentication failed"), + } + return pl.SetLogError(&event, input) + } + + employee, err := ue.ReadDetailData(ee.ReadDetailDto{User_Id: &input.AuthInfo.User_Id}, &event, tx) + if err != nil { + return err + } + input.Employee_Id = &employee.Id if resData, err := CreateData(input, &event, tx); err != nil { return err } else {