feat (mcu-order): handle doctor_id on create and update

This commit is contained in:
dpurbosakti
2025-10-03 11:00:07 +07:00
parent 39efdf4d57
commit 06a6ac6424
5 changed files with 73 additions and 1 deletions

No files matched your search

@@ -6,6 +6,7 @@ import (
e "simrs-vx/internal/domain/main-entities/mcu-order"
ud "simrs-vx/internal/use-case/main-use-case/doctor"
ue "simrs-vx/internal/use-case/main-use-case/encounter"
erc "simrs-vx/internal/domain/references/common"
@@ -45,6 +46,22 @@ func Create(input e.CreateDto) (*d.Data, error) {
return errors.New("encounter is already done")
}
if !input.AuthInfo.IsDoctor() {
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)
}
doctor_id, err := ud.GetIdByUserId(&input.AuthInfo.User_Id, &event, tx)
if err != nil {
return err
}
input.Doctor_Id = doctor_id
if resData, err := CreateData(input, &event, tx); err != nil {
return err
} else {
@@ -197,6 +214,10 @@ func Update(input e.UpdateDto) (*d.Data, error) {
return err
}
if data.IsCompleted() {
return errors.New("data already completed")
}
mwRunner := newMiddlewareRunner(&event, tx)
mwRunner.setMwType(pu.MWTPre)
// Run pre-middleware
@@ -204,6 +225,33 @@ func Update(input e.UpdateDto) (*d.Data, error) {
return err
}
if !input.AuthInfo.IsDoctor() {
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)
}
doctor_id, err := ud.GetIdByUserId(&input.AuthInfo.User_Id, &event, tx)
if err != nil {
return err
}
if !data.IsSameDoctor(doctor_id) {
event.Status = "failed"
event.ErrInfo = pl.ErrorInfo{
Code: "auth-forbidden",
Detail: "doctor is not the same as the data",
Raw: errors.New("authentication failed"),
}
return pl.SetLogError(&event, input)
}
input.Doctor_Id = doctor_id
if err := UpdateData(input, data, &event, tx); err != nil {
return err
}
@@ -25,4 +25,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.McuOrder) {
data.Number = inputSrc.Number
data.Temperature = inputSrc.Temperature
data.McuUrgencyLevel_Code = inputSrc.McuUrgencyLevel_Code
data.Doctor_Id = inputSrc.Doctor_Id
}