From 2cc7af845da640d67b82d6803167372792fbb5d5 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Mon, 8 Dec 2025 15:15:25 +0700 Subject: [PATCH] feat (patient): add patient employee checker --- internal/lib/auth/tycovar.go | 4 ++++ .../use-case/main-use-case/patient/case.go | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/internal/lib/auth/tycovar.go b/internal/lib/auth/tycovar.go index c673eb04..c746b795 100644 --- a/internal/lib/auth/tycovar.go +++ b/internal/lib/auth/tycovar.go @@ -103,3 +103,7 @@ func (a AuthInfo) IsNurseIntern() bool { func (a AuthInfo) HasEmployeePosition() bool { return a.Employee_Position_Code != nil } + +func (a AuthInfo) IsReg() bool { + return a.Employee_Position_Code != nil && *a.Employee_Position_Code == string(ero.EPCReg) +} diff --git a/internal/use-case/main-use-case/patient/case.go b/internal/use-case/main-use-case/patient/case.go index 24aa4394..a53072fe 100644 --- a/internal/use-case/main-use-case/patient/case.go +++ b/internal/use-case/main-use-case/patient/case.go @@ -50,6 +50,16 @@ func Create(input e.CreateDto) (*d.Data, error) { return nil, pl.SetLogError(&event, input) } + if !input.AuthInfo.IsReg() { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "auth-forbidden", + Detail: "user role is not allowed to create patient, only 'reg' position is allowed", + Raw: errors.New("authentication failed"), + } + return nil, pl.SetLogError(&event, input) + } + input.RegisteredBy_User_Name = &input.AuthInfo.User_Name err := dg.I.Transaction(func(tx *gorm.DB) error { @@ -256,6 +266,16 @@ func Update(input e.UpdateDto) (*d.Data, error) { pl.SetLogInfo(&event, input, "started", "update") mwRunner := newMiddlewareRunner(&event) + if !input.AuthInfo.IsReg() { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "auth-forbidden", + Detail: "user role is not allowed to create patient, only 'reg' position is allowed", + Raw: errors.New("authentication failed"), + } + return nil, pl.SetLogError(&event, input) + } + err = dg.I.Transaction(func(tx *gorm.DB) error { pl.SetLogInfo(&event, rdDto, "started", "DBReadDetail") if data, err = ReadDetailData(rdDto, &event, tx); err != nil {