From e69fe7bbb1aeb3d33b148048bb2b3471e5e1d1ed Mon Sep 17 00:00:00 2001 From: Munawwirul Jamal Date: Sat, 1 Nov 2025 16:13:40 +0700 Subject: [PATCH] feat/trx-order: mcu - added inlcude on the McuOrder - reuse deleted data on the McuOrderItem - added scope on the McuOrder --- internal/domain/main-entities/mcu-order/dto.go | 3 ++- .../domain/main-entities/mcu-order/entity.go | 2 ++ .../main-entities/mcu-src-category/entity.go | 2 +- internal/domain/main-entities/mcu-src/dto.go | 2 +- .../interface/main-handler/mcu-order/handler.go | 1 + .../main-use-case/mcu-order-item/lib.go | 17 ++++++++++++++--- .../use-case/main-use-case/mcu-order/lib.go | 2 +- 7 files changed, 22 insertions(+), 7 deletions(-) diff --git a/internal/domain/main-entities/mcu-order/dto.go b/internal/domain/main-entities/mcu-order/dto.go index a8ce83de..9c540d56 100644 --- a/internal/domain/main-entities/mcu-order/dto.go +++ b/internal/domain/main-entities/mcu-order/dto.go @@ -49,7 +49,8 @@ type FilterDto struct { McuUrgencyLevel_Code ercl.McuUrgencyLevelCode `json:"mcuUrgencyLevel-code"` } type ReadDetailDto struct { - Id uint `json:"id"` + Id uint `json:"id"` + Includes string `json:"includes"` } type UpdateDto struct { diff --git a/internal/domain/main-entities/mcu-order/entity.go b/internal/domain/main-entities/mcu-order/entity.go index 1c72a2ba..38053523 100644 --- a/internal/domain/main-entities/mcu-order/entity.go +++ b/internal/domain/main-entities/mcu-order/entity.go @@ -8,6 +8,7 @@ import ( ercl "simrs-vx/internal/domain/references/clinical" erc "simrs-vx/internal/domain/references/common" + ere "simrs-vx/internal/domain/references/encounter" ) type McuOrder struct { @@ -22,6 +23,7 @@ type McuOrder struct { Number uint8 `json:"number"` Temperature float64 `json:"temperature"` McuUrgencyLevel_Code ercl.McuUrgencyLevelCode `json:"mcuUrgencyLevel_code" gorm:"not null;size:15"` + Scope_Code *ere.CheckupScopeCode `json:"scope_code" gorm:"index;size:10"` } func (d McuOrder) IsCompleted() bool { diff --git a/internal/domain/main-entities/mcu-src-category/entity.go b/internal/domain/main-entities/mcu-src-category/entity.go index 21c266e3..3a0d08ca 100644 --- a/internal/domain/main-entities/mcu-src-category/entity.go +++ b/internal/domain/main-entities/mcu-src-category/entity.go @@ -9,5 +9,5 @@ type McuSrcCategory struct { ecore.SmallMain // adjust this according to the needs Code string `json:"code" gorm:"unique;size:20"` Name string `json:"name" gorm:"size:50"` - Scope_Code *ere.CheckupScopeCode `json:"scope_code" gorm:"size:10"` + Scope_Code *ere.CheckupScopeCode `json:"scope_code" gorm:"index;size:10"` } diff --git a/internal/domain/main-entities/mcu-src/dto.go b/internal/domain/main-entities/mcu-src/dto.go index 96586057..7ab13428 100644 --- a/internal/domain/main-entities/mcu-src/dto.go +++ b/internal/domain/main-entities/mcu-src/dto.go @@ -22,7 +22,7 @@ type ReadListDto struct { type FilterDto struct { Code string `json:"code"` Name string `json:"name"` - McuSrcCategory_Code *string `json:"mcuSrcCategory-code"` + McuSrcCategory_Code *string `json:"mcu-src-category-code"` Search string `json:"search" gormhelper:"searchColumns=Code,Name"` } diff --git a/internal/interface/main-handler/mcu-order/handler.go b/internal/interface/main-handler/mcu-order/handler.go index 2cdb5c32..ac4aca9f 100644 --- a/internal/interface/main-handler/mcu-order/handler.go +++ b/internal/interface/main-handler/mcu-order/handler.go @@ -47,6 +47,7 @@ func (obj myBase) GetDetail(w http.ResponseWriter, r *http.Request) { return } dto := e.ReadDetailDto{} + sf.UrlQueryParam(&dto, *r.URL) dto.Id = uint(id) res, err := u.ReadDetail(dto) rw.DataResponse(w, res, err) diff --git a/internal/use-case/main-use-case/mcu-order-item/lib.go b/internal/use-case/main-use-case/mcu-order-item/lib.go index e53f1c2f..13030ce8 100644 --- a/internal/use-case/main-use-case/mcu-order-item/lib.go +++ b/internal/use-case/main-use-case/mcu-order-item/lib.go @@ -15,9 +15,6 @@ import ( func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.McuOrderItem, error) { pl.SetLogInfo(event, nil, "started", "DBCreate") - data := e.McuOrderItem{} - setData(&input, &data) - var tx *gorm.DB if len(dbx) > 0 { tx = dbx[0] @@ -25,6 +22,20 @@ func CreateData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*e.McuOrde tx = dg.I } + deletedData := e.McuOrderItem{} + tx.Unscoped(). + Where("\"McuOrder_Id\" = ? AND \"McuSrc_Id\" = ?", input.McuOrder_Id, input.McuSrc_Id). + First(&deletedData) + if deletedData.Id != 0 { + if err := tx.Model(e.McuOrderItem{}).Where("Id = ?", deletedData.Id).Update("DeletedAt", nil).Error; err != nil { + return nil, plh.HandleCreateError(input, event, err) + } + return &deletedData, nil + } + + data := e.McuOrderItem{} + setData(&input, &data) + if err := tx.Create(&data).Error; err != nil { return nil, plh.HandleCreateError(input, event, err) } diff --git a/internal/use-case/main-use-case/mcu-order/lib.go b/internal/use-case/main-use-case/mcu-order/lib.go index ccb63db9..c659be5b 100644 --- a/internal/use-case/main-use-case/mcu-order/lib.go +++ b/internal/use-case/main-use-case/mcu-order/lib.go @@ -81,7 +81,7 @@ func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e tx = dg.I } - if err := tx.First(&data, input.Id).Error; err != nil { + if err := tx.Scopes(gh.Preload(input.Includes)).First(&data, input.Id).Error; err != nil { if processedErr := pu.HandleReadError(err, event, source, input.Id, data); processedErr != nil { return nil, processedErr }