diff --git a/internal/domain/main-entities/chemo-plan/dto.go b/internal/domain/main-entities/chemo-plan/dto.go index d83af082..1e8d4bb9 100644 --- a/internal/domain/main-entities/chemo-plan/dto.go +++ b/internal/domain/main-entities/chemo-plan/dto.go @@ -50,6 +50,10 @@ type FailDto struct { Id uint `json:"id"` Reasons *string `json:"reason"` } +type FailReason struct { + Date *time.Time `json:"date"` + FailReason *string `json:"failReason"` +} type MetaDto struct { PageNumber int `json:"page_number"` diff --git a/internal/use-case/main-use-case/chemo-plan/case.go b/internal/use-case/main-use-case/chemo-plan/case.go index 99ef3a63..6a4c426e 100644 --- a/internal/use-case/main-use-case/chemo-plan/case.go +++ b/internal/use-case/main-use-case/chemo-plan/case.go @@ -253,4 +253,44 @@ func Delete(input e.DeleteDto) (*d.Data, error) { } -func Fail(i) +func Fail(input e.FailDto) (*d.Data, error) { + rdDto := e.ReadDetailDto{Id: input.Id} + var data *e.ChemoPlan + var err error + + event := pl.Event{ + Feature: "Chemo-Fail", + Source: source, + } + + // Start log + pl.SetLogInfo(&event, input, "started", "update") + + err = dg.I.Transaction(func(tx *gorm.DB) error { + pl.SetLogInfo(&event, rdDto, "started", "DBReadDetail") + if data, err = ReadDetailData(rdDto, &event, tx); err != nil { + return err + } + + if err := UpdateData(data, &event, tx); err != nil { + return err + } + + pl.SetLogInfo(&event, nil, "complete") + 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 + +} diff --git a/internal/use-case/main-use-case/chemo-plan/helper.go b/internal/use-case/main-use-case/chemo-plan/helper.go index dedacfd8..f1b6179d 100644 --- a/internal/use-case/main-use-case/chemo-plan/helper.go +++ b/internal/use-case/main-use-case/chemo-plan/helper.go @@ -5,6 +5,7 @@ Any functions that are used internally by the use-case package chemo_plan import ( + "encoding/json" e "simrs-vx/internal/domain/main-entities/chemo-plan" ep "simrs-vx/internal/domain/main-entities/chemo-protocol" ere "simrs-vx/internal/domain/references/encounter" @@ -34,3 +35,12 @@ func setDataUpdate(data *e.ChemoPlan) { status := ere.SPCComplete data.Status = status } + +func setDatafail(input e.FailDto, data *e.ChemoPlan) { + data.RealizationDate = nil + data.Status = ere.SPCSchedule + + var reasons []e.FailReason + + _ := json.Unmarshal(data.Re) +} diff --git a/internal/use-case/main-use-case/chemo-plan/lib.go b/internal/use-case/main-use-case/chemo-plan/lib.go index b90430cd..92d7c8eb 100644 --- a/internal/use-case/main-use-case/chemo-plan/lib.go +++ b/internal/use-case/main-use-case/chemo-plan/lib.go @@ -145,3 +145,28 @@ func DeleteData(data *e.ChemoPlan, event *pl.Event, dbx ...*gorm.DB) error { pl.SetLogInfo(event, nil, "complete") return nil } + +func UpdateFailData(input e.FailDto, data *e.ChemoPlan, event *pl.Event, dbx ...*gorm.DB) error { + pl.SetLogInfo(event, data, "started", "DBUpdate") + setDataUpdate(data) + + var tx *gorm.DB + if len(dbx) > 0 { + tx = dbx[0] + } else { + tx = dg.I + } + + if err := tx.Save(&data).Error; err != nil { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "data-update-fail", + Detail: "Database update failed", + Raw: err, + } + return pl.SetLogError(event, data) + } + + pl.SetLogInfo(event, nil, "complete") + return nil +}