feat (resume): add verify and validate, base value structure
This commit is contained in:
@@ -4,7 +4,10 @@ import (
|
||||
"errors"
|
||||
"strconv"
|
||||
|
||||
erc "simrs-vx/internal/domain/references/common"
|
||||
|
||||
// main entities
|
||||
ee "simrs-vx/internal/domain/main-entities/encounter"
|
||||
e "simrs-vx/internal/domain/main-entities/resume"
|
||||
|
||||
ue "simrs-vx/internal/use-case/main-use-case/encounter"
|
||||
@@ -31,6 +34,10 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
err := dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
if !input.AuthInfo.IsDoctor() {
|
||||
return errors.New("user is not a doctor")
|
||||
}
|
||||
|
||||
mwRunner := newMiddlewareRunner(&event, tx)
|
||||
mwRunner.setMwType(pu.MWTPre)
|
||||
// Run pre-middleware
|
||||
@@ -43,6 +50,7 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
return errors.New("encounter is already done")
|
||||
}
|
||||
|
||||
input.Status_Code = erc.DVCNew
|
||||
if resData, err := CreateData(input, &event, tx); err != nil {
|
||||
return err
|
||||
} else {
|
||||
@@ -188,6 +196,10 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
pl.SetLogInfo(&event, input, "started", "update")
|
||||
|
||||
err = dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
if !input.AuthInfo.IsDoctor() {
|
||||
return errors.New("user is not a doctor")
|
||||
}
|
||||
|
||||
pl.SetLogInfo(&event, rdDto, "started", "DBReadDetail")
|
||||
if data, err = ReadDetailData(rdDto, &event, tx); err != nil {
|
||||
return err
|
||||
@@ -254,6 +266,10 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
pl.SetLogInfo(&event, input, "started", "delete")
|
||||
|
||||
err = dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
if !input.AuthInfo.IsDoctor() {
|
||||
return errors.New("user is not a doctor")
|
||||
}
|
||||
|
||||
pl.SetLogInfo(&event, rdDto, "started", "DBReadDetail")
|
||||
if data, err = ReadDetailData(rdDto, &event, tx); err != nil {
|
||||
return err
|
||||
@@ -293,3 +309,84 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
}, nil
|
||||
|
||||
}
|
||||
|
||||
func UpdateStatusCode(input e.UpdateDto) (*d.Data, error) {
|
||||
rdDto := e.ReadDetailDto{Id: input.Id}
|
||||
var data *e.Resume
|
||||
var err error
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "UpdateStatusCode",
|
||||
Source: source,
|
||||
}
|
||||
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "updateStatusCode")
|
||||
|
||||
err = dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
if !input.AuthInfo.IsDoctor() {
|
||||
return errors.New("user is not a doctor")
|
||||
}
|
||||
|
||||
pl.SetLogInfo(&event, rdDto, "started", "DBReadDetail")
|
||||
if data, err = ReadDetailData(rdDto, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
enc, err := ue.ReadDetailData(ee.ReadDetailDto{Id: uint16(*data.Encounter_Id)}, &event, tx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// check if encounter is done
|
||||
if enc.IsDone() {
|
||||
return errors.New("encounter is already done")
|
||||
}
|
||||
|
||||
switch input.Status_Code {
|
||||
case erc.DVCValidated:
|
||||
if !enc.IsSameResponsibleDoctor(input.AuthInfo.Doctor_Code) {
|
||||
return errors.New("validation doctor is not the same as encounter responsible doctor")
|
||||
}
|
||||
|
||||
if data.IsNew() {
|
||||
return errors.New("resume need to be verified first")
|
||||
}
|
||||
if data.IsValidated() {
|
||||
return errors.New("resume already validated")
|
||||
}
|
||||
data.Status_Code = erc.DVCValidated
|
||||
err = tx.Save(&data).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
case erc.DVCVerified:
|
||||
if data.IsValidated() {
|
||||
return errors.New("resume already validated")
|
||||
}
|
||||
if data.IsVerified() {
|
||||
return errors.New("resume already verified")
|
||||
}
|
||||
data.Status_Code = erc.DVCVerified
|
||||
err = tx.Save(&data).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &d.Data{
|
||||
Meta: d.IS{
|
||||
"source": source,
|
||||
"structure": "single-data",
|
||||
"status": "updated",
|
||||
},
|
||||
Data: data.ToResponse(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -18,5 +18,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Resume) {
|
||||
}
|
||||
|
||||
data.Encounter_Id = inputSrc.Encounter_Id
|
||||
data.Doctor_Code = inputSrc.AuthInfo.Doctor_Code
|
||||
data.Value = inputSrc.Value
|
||||
data.Status_Code = inputSrc.Status_Code
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user