From 29469d4c50864b442455d88489132a45258c63e8 Mon Sep 17 00:00:00 2001 From: vanilia Date: Thu, 13 Nov 2025 20:54:35 +0700 Subject: [PATCH] add installation --- internal/domain/sync-entities/log/dto.go | 12 ++ internal/infra/simgos-db/simgos-db.go | 9 + internal/infra/simgos-db/tycovar.go | 5 + internal/infra/sync-cfg/sync-cfg.go | 7 +- internal/infra/sync-cfg/tycovar.go | 5 +- .../installation/handler.go | 46 ++-- .../simgos-sync-handler.go | 8 +- .../main-use-case/installation/case.go | 43 +++- .../installation/middleware-runner.go | 25 ++- .../main-use-case/installation/middleware.go | 6 +- .../main-use-case/installation/tycovar.go | 11 +- .../simgos-sync-plugin/installation/plugin.go | 49 ++++- .../simgos-sync-use-case/installation/case.go | 197 ++++++++++-------- .../installation/helper.go | 33 +-- .../simgos-sync-use-case/installation/lib.go | 20 +- 15 files changed, 313 insertions(+), 163 deletions(-) create mode 100644 internal/domain/sync-entities/log/dto.go create mode 100644 internal/infra/simgos-db/simgos-db.go create mode 100644 internal/infra/simgos-db/tycovar.go diff --git a/internal/domain/sync-entities/log/dto.go b/internal/domain/sync-entities/log/dto.go new file mode 100644 index 00000000..32f5be6f --- /dev/null +++ b/internal/domain/sync-entities/log/dto.go @@ -0,0 +1,12 @@ +package log + +import ( + erc "simrs-vx/internal/domain/references/common" +) + +type SimxLogDto struct { + Payload any `json:"payload"` + IsSuccess bool `json:"isSuccess"` + ErrMessage *string `json:"errMessage"` + Method erc.CrudCode `json:"method"` +} diff --git a/internal/infra/simgos-db/simgos-db.go b/internal/infra/simgos-db/simgos-db.go new file mode 100644 index 00000000..4387ad7f --- /dev/null +++ b/internal/infra/simgos-db/simgos-db.go @@ -0,0 +1,9 @@ +package simgos_db + +import ( + dg "github.com/karincake/apem/db-gorm-pg" +) + +func SetInstance() { + I = dg.IS["simrs"] +} diff --git a/internal/infra/simgos-db/tycovar.go b/internal/infra/simgos-db/tycovar.go new file mode 100644 index 00000000..b9c9f2b3 --- /dev/null +++ b/internal/infra/simgos-db/tycovar.go @@ -0,0 +1,5 @@ +package simgos_db + +import "gorm.io/gorm" + +var I *gorm.DB diff --git a/internal/infra/sync-cfg/sync-cfg.go b/internal/infra/sync-cfg/sync-cfg.go index a5579219..a6a5d703 100644 --- a/internal/infra/sync-cfg/sync-cfg.go +++ b/internal/infra/sync-cfg/sync-cfg.go @@ -7,12 +7,9 @@ import ( func SetConfig() { a.ParseSingleCfg(&O) - //if O.Host == "" || O.Target == "" { - // panic("sync url config host or target empty") - //} - if O.BaseUrl == "" { - panic("config bpjs base url empty") + if O.Host == "" || O.Prefix == "" { + panic("config sync host and prefix empty") } lo.I.Println("sync url config loaded, status: DONE!!") } diff --git a/internal/infra/sync-cfg/tycovar.go b/internal/infra/sync-cfg/tycovar.go index 081ef762..fdcda00b 100644 --- a/internal/infra/sync-cfg/tycovar.go +++ b/internal/infra/sync-cfg/tycovar.go @@ -3,7 +3,6 @@ package synccfg var O SyncUrlCfg = SyncUrlCfg{} type SyncUrlCfg struct { - Target string `yaml:"target"` - Host string `yaml:"host"` - BaseUrl string `yaml:"baseUrl"` + Prefix string `yaml:"prefix"` + Host string `yaml:"host"` } diff --git a/internal/interface/simgos-sync-handler/installation/handler.go b/internal/interface/simgos-sync-handler/installation/handler.go index 01a6beab..6f9a708d 100644 --- a/internal/interface/simgos-sync-handler/installation/handler.go +++ b/internal/interface/simgos-sync-handler/installation/handler.go @@ -7,6 +7,7 @@ import ( // ua "github.com/karincake/tumpeng/auth/svc" e "simrs-vx/internal/domain/main-entities/installation" + esync "simrs-vx/internal/domain/sync-entities/log" u "simrs-vx/internal/use-case/simgos-sync-use-case/installation" ) @@ -23,29 +24,38 @@ func (obj myBase) Create(w http.ResponseWriter, r *http.Request) { rw.DataResponse(w, res, err) } -func (obj myBase) Update(w http.ResponseWriter, r *http.Request) { - code := rw.ValidateString(w, "code", r.PathValue("code")) - if code == "" { - return - } - - dto := e.UpdateDto{} +func (obj myBase) CreateLog(w http.ResponseWriter, r *http.Request) { + dto := esync.SimxLogDto{} if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { return } - dto.Code = &code - res, err := u.Update(dto) + res, err := u.CreateSimxLog(dto) rw.DataResponse(w, res, err) } +func (obj myBase) Update(w http.ResponseWriter, r *http.Request) { + //code := rw.ValidateString(w, "code", r.PathValue("code")) + //if code == "" { + // return + //} + // + //dto := e.UpdateDto{} + //if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { + // return + //} + //dto.Code = &code + //res, err := u.Update(dto) + //rw.DataResponse(w, res, err) +} + func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) { - code := rw.ValidateString(w, "code", r.PathValue("code")) - if code == "" { - return - } - - dto := e.DeleteDto{} - dto.Code = &code - res, err := u.Delete(dto) - rw.DataResponse(w, res, err) + //code := rw.ValidateString(w, "code", r.PathValue("code")) + //if code == "" { + // return + //} + // + //dto := e.DeleteDto{} + //dto.Code = &code + //res, err := u.Delete(dto) + //rw.DataResponse(w, res, err) } diff --git a/internal/interface/simgos-sync-handler/simgos-sync-handler.go b/internal/interface/simgos-sync-handler/simgos-sync-handler.go index 963ec93c..71002949 100644 --- a/internal/interface/simgos-sync-handler/simgos-sync-handler.go +++ b/internal/interface/simgos-sync-handler/simgos-sync-handler.go @@ -2,8 +2,11 @@ package simgossynchandler import ( "net/http" + /******************** infra ********************/ gs "simrs-vx/internal/infra/gorm-setting" + simgosdb "simrs-vx/internal/infra/simgos-db" + simgossync "simrs-vx/internal/infra/sync-cfg" /******************** pkg ********************/ cmw "simrs-vx/pkg/cors-manager-mw" @@ -25,6 +28,8 @@ func SetRoutes() http.Handler { a.RegisterExtCall(gs.Adjust) a.RegisterExtCall(zlc.Adjust) a.RegisterExtCall(lh.Populate) + a.RegisterExtCall(simgossync.SetConfig) + a.RegisterExtCall(simgosdb.SetInstance) r := http.NewServeMux() @@ -32,8 +37,9 @@ func SetRoutes() http.Handler { r.HandleFunc("/", home.Home) /******************** Source ******************/ - hk.GroupRoutes("/v1/installation", r, hk.MapHandlerFunc{ + hk.GroupRoutes("/new-to-old/v1/installation", r, hk.MapHandlerFunc{ "POST /": installation.O.Create, + "POST /log": installation.O.CreateLog, "PATCH /{id}": installation.O.Update, "DELETE /{id}": installation.O.Delete, }) diff --git a/internal/use-case/main-use-case/installation/case.go b/internal/use-case/main-use-case/installation/case.go index 8e577a30..d0a409c0 100644 --- a/internal/use-case/main-use-case/installation/case.go +++ b/internal/use-case/main-use-case/installation/case.go @@ -1,7 +1,7 @@ package installation import ( - egos "simrs-vx/internal/domain/simgos-entities/installation" + erc "simrs-vx/internal/domain/references/common" "strconv" dg "github.com/karincake/apem/db-gorm-pg" @@ -13,6 +13,8 @@ import ( "gorm.io/gorm" e "simrs-vx/internal/domain/main-entities/installation" + egos "simrs-vx/internal/domain/simgos-entities/installation" + esync "simrs-vx/internal/domain/sync-entities/log" ) const source = "installation" @@ -28,19 +30,18 @@ func Create(input e.CreateDto) (*d.Data, error) { // Start log pl.SetLogInfo(&event, input, "started", "create") + mwRunner := newMiddlewareRunner(&event) err := dg.I.Transaction(func(tx *gorm.DB) error { - mwRunner := newMiddlewareRunner(&event, tx) - if resData, err := CreateData(input, &event, tx); err != nil { return err } else { data = *resData } - mwRunner.setMwType(pu.MWTPost) - // Run post-middleware - if err := mwRunner.RunCreateMiddleware(createPostMw, &input, &sgData); err != nil { + mwRunner.setMwType(pu.MWTPre) + // Run pre-middleware + if err := mwRunner.RunCreateMiddleware(createPreMw, &input, &sgData); err != nil { return err } @@ -49,7 +50,29 @@ func Create(input e.CreateDto) (*d.Data, error) { return nil }) + var errMsg string + inputLog := esync.SimxLogDto{ + Payload: input, + Method: erc.CCCreate, + } + if err != nil { + // Run log-middleware + errMsg = err.Error() + inputLog.ErrMessage = &errMsg + inputLog.IsSuccess = false + + // create log failed + if err = mwRunner.RunCreateLogMiddleware(createSimxLogMw, &inputLog); err != nil { + return nil, err + } + + return nil, err + } + + // create log success + inputLog.IsSuccess = true + if err = mwRunner.RunCreateLogMiddleware(createSimxLogMw, &inputLog); err != nil { return nil, err } @@ -78,7 +101,7 @@ func ReadList(input e.ReadListDto) (*d.Data, error) { pl.SetLogInfo(&event, input, "started", "readList") err = dg.I.Transaction(func(tx *gorm.DB) error { - mwRunner := newMiddlewareRunner(&event, tx) + mwRunner := newMiddlewareRunner(&event) mwRunner.setMwType(pu.MWTPre) // Run pre-middleware if err := mwRunner.RunReadListMiddleware(readListPreMw, &input, data); err != nil { @@ -129,7 +152,7 @@ func ReadDetail(input e.ReadDetailDto) (*d.Data, error) { pl.SetLogInfo(&event, input, "started", "readDetail") err = dg.I.Transaction(func(tx *gorm.DB) error { - mwRunner := newMiddlewareRunner(&event, tx) + mwRunner := newMiddlewareRunner(&event) mwRunner.setMwType(pu.MWTPre) // Run pre-middleware if err := mwRunner.RunReadDetailMiddleware(readDetailPreMw, &input, data); err != nil { @@ -182,7 +205,7 @@ func Update(input e.UpdateDto) (*d.Data, error) { return err } - mwRunner := newMiddlewareRunner(&event, tx) + mwRunner := newMiddlewareRunner(&event) mwRunner.setMwType(pu.MWTPre) // Run pre-middleware if err := mwRunner.RunUpdateMiddleware(readDetailPreMw, &rdDto, data); err != nil { @@ -238,7 +261,7 @@ func Delete(input e.DeleteDto) (*d.Data, error) { return err } - mwRunner := newMiddlewareRunner(&event, tx) + mwRunner := newMiddlewareRunner(&event) mwRunner.setMwType(pu.MWTPre) // Run pre-middleware if err := mwRunner.RunDeleteMiddleware(readDetailPreMw, &rdDto, data); err != nil { diff --git a/internal/use-case/main-use-case/installation/middleware-runner.go b/internal/use-case/main-use-case/installation/middleware-runner.go index 0abd6b29..acfaaa47 100644 --- a/internal/use-case/main-use-case/installation/middleware-runner.go +++ b/internal/use-case/main-use-case/installation/middleware-runner.go @@ -1,12 +1,14 @@ package installation import ( - e "simrs-vx/internal/domain/main-entities/installation" - egos "simrs-vx/internal/domain/simgos-entities/installation" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" "gorm.io/gorm" + + e "simrs-vx/internal/domain/main-entities/installation" + egos "simrs-vx/internal/domain/simgos-entities/installation" + esync "simrs-vx/internal/domain/sync-entities/log" ) type middlewareRunner struct { @@ -16,10 +18,9 @@ type middlewareRunner struct { } // NewMiddlewareExecutor creates a new middleware executor -func newMiddlewareRunner(event *pl.Event, tx *gorm.DB) *middlewareRunner { +func newMiddlewareRunner(event *pl.Event) *middlewareRunner { return &middlewareRunner{ Event: event, - Tx: tx, } } @@ -39,6 +40,22 @@ func (me *middlewareRunner) RunCreateMiddleware(middlewares []createMw, input *e return nil } +// ExecuteCreateMiddleware executes create middleware +func (me *middlewareRunner) RunCreateLogMiddleware(middlewares []createLogMw, input *esync.SimxLogDto) error { + for _, middleware := range middlewares { + logData := pu.GetLogData(input, nil) + + pl.SetLogInfo(me.Event, logData, "started", middleware.Name) + + if err := middleware.Func(input); err != nil { + return pu.HandleMiddlewareError(me.Event, string(me.MwType), middleware.Name, logData, err) + } + + pl.SetLogInfo(me.Event, nil, "complete") + } + return nil +} + func (me *middlewareRunner) RunReadListMiddleware(middlewares []readListMw, input *e.ReadListDto, data *e.Installation) error { for _, middleware := range middlewares { logData := pu.GetLogData(input, data) diff --git a/internal/use-case/main-use-case/installation/middleware.go b/internal/use-case/main-use-case/installation/middleware.go index 46c4be1d..222ec563 100644 --- a/internal/use-case/main-use-case/installation/middleware.go +++ b/internal/use-case/main-use-case/installation/middleware.go @@ -6,7 +6,11 @@ import ( // example of middleware func init() { - createPostMw = append(createPostMw, + createPreMw = append(createPreMw, createMw{Name: "create-installation", Func: plugin.Create}, ) + + createSimxLogMw = append(createSimxLogMw, + createLogMw{Name: "create-log", Func: plugin.CreateLog}, + ) } diff --git a/internal/use-case/main-use-case/installation/tycovar.go b/internal/use-case/main-use-case/installation/tycovar.go index 975ebd34..e704b3a1 100644 --- a/internal/use-case/main-use-case/installation/tycovar.go +++ b/internal/use-case/main-use-case/installation/tycovar.go @@ -14,6 +14,7 @@ import ( "gorm.io/gorm" e "simrs-vx/internal/domain/main-entities/installation" + elog "simrs-vx/internal/domain/sync-entities/log" ) type createMw struct { @@ -21,6 +22,11 @@ type createMw struct { Func func(input *e.CreateDto, data *egos.MInstalasi, tx *gorm.DB) error } +type createLogMw struct { + Name string + Func func(input *elog.SimxLogDto) error +} + type readListMw struct { Name string Func func(input *e.ReadListDto, data *e.Installation, tx *gorm.DB) error @@ -34,8 +40,9 @@ type readDetailMw struct { type UpdateMw = readDetailMw type DeleteMw = readDetailMw -var createPreMw []createMw // preprocess middleware -var createPostMw []createMw // postprocess middleware +var createPreMw []createMw // preprocess middleware +var createPostMw []createMw // postprocess middleware +var createSimxLogMw []createLogMw var readListPreMw []readListMw // .. var readListPostMw []readListMw // .. var readDetailPreMw []readDetailMw diff --git a/internal/use-case/simgos-sync-plugin/installation/plugin.go b/internal/use-case/simgos-sync-plugin/installation/plugin.go index 92ef479b..b566302b 100644 --- a/internal/use-case/simgos-sync-plugin/installation/plugin.go +++ b/internal/use-case/simgos-sync-plugin/installation/plugin.go @@ -6,25 +6,29 @@ import ( "fmt" "io" "net/http" + + "gorm.io/gorm" + sync "simrs-vx/internal/infra/sync-cfg" e "simrs-vx/internal/domain/main-entities/installation" egos "simrs-vx/internal/domain/simgos-entities/installation" - - "gorm.io/gorm" + elog "simrs-vx/internal/domain/sync-entities/log" ) -var endpoint = fmt.Sprintf("%s/v1/installation", sync.O.BaseUrl) - func Create(input *e.CreateDto, data *egos.MInstalasi, tx *gorm.DB) error { + var endpoint = fmt.Sprintf("%s%s/v1/installation", sync.O.Host, sync.O.Prefix) + jsonData, err := json.Marshal(input) if err != nil { return fmt.Errorf("failed to encode JSON: %w", err) } + req, err := http.NewRequest("POST", endpoint, bytes.NewReader(jsonData)) if err != nil { return err } + req.Header.Set("Content-Type", "application/json") resp, err := http.DefaultClient.Do(req) @@ -33,6 +37,10 @@ func Create(input *e.CreateDto, data *egos.MInstalasi, tx *gorm.DB) error { } defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return fmt.Errorf(resp.Status) + } + body, err := io.ReadAll(resp.Body) if err != nil { return err @@ -44,3 +52,36 @@ func Create(input *e.CreateDto, data *egos.MInstalasi, tx *gorm.DB) error { return nil } + +func CreateLog(input *elog.SimxLogDto) error { + var endpoint = fmt.Sprintf("%s%s/v1/installation/log", sync.O.Host, sync.O.Prefix) + + jsonData, err := json.Marshal(input) + if err != nil { + return fmt.Errorf("failed to encode JSON: %w", err) + } + + req, err := http.NewRequest("POST", endpoint, bytes.NewReader(jsonData)) + if err != nil { + return err + } + + req.Header.Set("Content-Type", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf(resp.Status) + } + + _, err = io.ReadAll(resp.Body) + if err != nil { + return err + } + + return nil +} diff --git a/internal/use-case/simgos-sync-use-case/installation/case.go b/internal/use-case/simgos-sync-use-case/installation/case.go index 2990d5ae..f38cca14 100644 --- a/internal/use-case/simgos-sync-use-case/installation/case.go +++ b/internal/use-case/simgos-sync-use-case/installation/case.go @@ -1,9 +1,8 @@ package installation import ( - erc "simrs-vx/internal/domain/references/common" + esync "simrs-vx/internal/domain/sync-entities/log" "strconv" - "time" dg "github.com/karincake/apem/db-gorm-pg" d "github.com/karincake/dodol" @@ -14,16 +13,63 @@ import ( "gorm.io/gorm" e "simrs-vx/internal/domain/main-entities/installation" - egos "simrs-vx/internal/domain/simgos-entities/installation" - esync "simrs-vx/internal/domain/sync-entities/installation" ) const source = "installation" -var now = time.Now() - func Create(input e.CreateDto) (*d.Data, error) { - sgData := egos.MInstalasi{} + event := pl.Event{ + Feature: "Create", + Source: source, + } + + // Start log + pl.SetLogInfo(&event, input, "started", "create") + + // Define trx + txSync := dg.I.Begin() + txSimgos := dg.IS["simrs"].Begin() + + // STEP 1: Insert to simgos + sgData, err := CreateSimgosData(input, &event, txSimgos) + if err != nil { + return nil, err + } + + // STEP 2: Insert to Link + if err = CreateInstallationLinkData(*input.Id, sgData.No_Instalasi, &event, txSync); err != nil { + txSimgos.Rollback() + return nil, err + } + + // STEP 3: Commit two trx + if err = txSimgos.Commit().Error; err != nil { + txSimgos.Rollback() + txSync.Rollback() + return nil, err + } + + if err = txSync.Commit().Error; err != nil { + // STEP 4: Rollback Partial + go func() { + _ = DeleteSimgosData(sgData, &event) + }() + return nil, err + } + + pl.SetLogInfo(&event, nil, "complete") + + return &d.Data{ + Meta: d.II{ + "source": source, + "structure": "single-data", + "status": "created", + }, + Data: sgData, + }, nil +} + +func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) { event := pl.Event{ Feature: "Create", Source: source, @@ -33,34 +79,8 @@ func Create(input e.CreateDto) (*d.Data, error) { pl.SetLogInfo(&event, input, "started", "create") err := dg.I.Transaction(func(tx *gorm.DB) error { - // Insert Simgos - sgData, err := CreateSimgosData(input, &event, tx) - if err != nil { - errMsg := err.Error() - inputLog := esync.InstallationSimxLog{ - Date: &now, - Status: erc.PSCFailed, - ErrMessage: &errMsg, - } - - // InsertSimxLog - if err = CreateSimxLogData(input, inputLog, &event, tx); err != nil { - return err - } - } else { - inputLog := esync.InstallationSimxLog{ - Date: &now, - Status: erc.PSCSuccess, - } - - // InsertSimxLog - if err = CreateSimxLogData(input, inputLog, &event, tx); err != nil { - return err - } - } - - // InsertSimxLink - if err = CreateInstallationLinkData(*input.Id, sgData.NoInstalasi, &event, tx); err != nil { + // InsertSimxLog + if err := CreateSimxLogData(input, &event, tx); err != nil { return err } @@ -79,7 +99,6 @@ func Create(input e.CreateDto) (*d.Data, error) { "structure": "single-data", "status": "created", }, - Data: sgData, }, nil } @@ -239,56 +258,56 @@ func ReadDetail(input e.ReadDetailDto) (*d.Data, error) { // //} -func Delete(input e.DeleteDto) (*d.Data, error) { - rdDto := e.ReadDetailDto{Code: input.Code} - var data *e.Installation - var err error - - event := pl.Event{ - Feature: "Delete", - Source: source, - } - - // Start log - pl.SetLogInfo(&event, input, "started", "delete") - - 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 - } - - mwRunner := newMiddlewareRunner(&event, tx) - mwRunner.setMwType(pu.MWTPre) - // Run pre-middleware - if err := mwRunner.RunDeleteMiddleware(readDetailPreMw, &rdDto, data); err != nil { - return err - } - - if err := DeleteData(data, &event, tx); err != nil { - return err - } - - mwRunner.setMwType(pu.MWTPost) - // Run post-middleware - if err := mwRunner.RunDeleteMiddleware(readDetailPostMw, &rdDto, data); err != nil { - return err - } - - return nil - }) - - if err != nil { - return nil, err - } - - return &d.Data{ - Meta: d.IS{ - "source": source, - "structure": "single-data", - "status": "deleted", - }, - Data: data.ToResponse(), - }, nil - -} +//func Delete(input e.DeleteDto) (*d.Data, error) { +// rdDto := e.ReadDetailDto{Code: input.Code} +// var data *e.Installation +// var err error +// +// event := pl.Event{ +// Feature: "Delete", +// Source: source, +// } +// +// // Start log +// pl.SetLogInfo(&event, input, "started", "delete") +// +// 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 +// } +// +// mwRunner := newMiddlewareRunner(&event, tx) +// mwRunner.setMwType(pu.MWTPre) +// // Run pre-middleware +// if err := mwRunner.RunDeleteMiddleware(readDetailPreMw, &rdDto, data); err != nil { +// return err +// } +// +// if err := DeleteData(data, &event, tx); err != nil { +// return err +// } +// +// mwRunner.setMwType(pu.MWTPost) +// // Run post-middleware +// if err := mwRunner.RunDeleteMiddleware(readDetailPostMw, &rdDto, data); err != nil { +// return err +// } +// +// return nil +// }) +// +// if err != nil { +// return nil, err +// } +// +// return &d.Data{ +// Meta: d.IS{ +// "source": source, +// "structure": "single-data", +// "status": "deleted", +// }, +// Data: data.ToResponse(), +// }, nil +// +//} diff --git a/internal/use-case/simgos-sync-use-case/installation/helper.go b/internal/use-case/simgos-sync-use-case/installation/helper.go index eae50f99..51316d79 100644 --- a/internal/use-case/simgos-sync-use-case/installation/helper.go +++ b/internal/use-case/simgos-sync-use-case/installation/helper.go @@ -7,8 +7,10 @@ package installation import ( "encoding/json" e "simrs-vx/internal/domain/main-entities/installation" + erc "simrs-vx/internal/domain/references/common" esimgos "simrs-vx/internal/domain/simgos-entities/installation" esync "simrs-vx/internal/domain/sync-entities/installation" + "simrs-vx/internal/domain/sync-entities/log" ) func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MInstalasi) { @@ -20,30 +22,31 @@ func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MInstal inputSrc = &inputTemp.CreateDto } - data.NamaInstalasi = inputSrc.Name - data.StatusRawatInap = 0 - data.StAktif = 1 + data.Nama_Instalasi = inputSrc.Name + data.Status_Rawat_Inap = 0 + data.St_Aktif = 1 return } -func setDataSimxLog[T *e.CreateDto | *e.UpdateDto](input T, inputLog esync.InstallationSimxLog) (data esync.InstallationSimxLog) { - var inputSrc *e.CreateDto - if inputT, ok := any(input).(*e.CreateDto); ok { - inputSrc = inputT - } else { - inputTemp := any(input).(*e.UpdateDto) - inputSrc = &inputTemp.CreateDto - } - +func setDataSimxLog(input *log.SimxLogDto) (data esync.InstallationSimxLog) { // encode to JSON - jsonData, _ := json.Marshal(inputSrc) + jsonData, _ := json.MarshalIndent(input.Payload, "", " ") jsonString := string(jsonData) + var status erc.ProcessStatusCode + if input.IsSuccess { + status = erc.PSCSuccess + } else { + status = erc.PSCFailed + if input.ErrMessage != nil { + data.ErrMessage = input.ErrMessage + } + } + data.Value = &jsonString data.Date = &now - data.Status = inputLog.Status - data.ErrMessage = inputLog.ErrMessage + data.Status = status return } diff --git a/internal/use-case/simgos-sync-use-case/installation/lib.go b/internal/use-case/simgos-sync-use-case/installation/lib.go index e76eb127..b260776e 100644 --- a/internal/use-case/simgos-sync-use-case/installation/lib.go +++ b/internal/use-case/simgos-sync-use-case/installation/lib.go @@ -1,9 +1,11 @@ package installation import ( + esync "simrs-vx/internal/domain/sync-entities/log" plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" + "time" dg "github.com/karincake/apem/db-gorm-pg" gh "github.com/karincake/getuk" @@ -11,9 +13,10 @@ import ( e "simrs-vx/internal/domain/main-entities/installation" esimgos "simrs-vx/internal/domain/simgos-entities/installation" - esync "simrs-vx/internal/domain/sync-entities/installation" ) +var now = time.Now() + func CreateSimgosData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*esimgos.MInstalasi, error) { pl.SetLogInfo(event, nil, "started", "DBCreate") @@ -23,7 +26,7 @@ func CreateSimgosData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*esi if len(dbx) > 0 { tx = dbx[0] } else { - tx = dg.I + tx = dg.IS["simrs"] } if err := tx.Create(&data).Error; err != nil { @@ -34,9 +37,9 @@ func CreateSimgosData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*esi return &data, nil } -func CreateSimxLogData(input e.CreateDto, inputLog esync.InstallationSimxLog, event *pl.Event, dbx ...*gorm.DB) error { +func CreateSimxLogData(input esync.SimxLogDto, event *pl.Event, dbx ...*gorm.DB) error { pl.SetLogInfo(event, nil, "started", "DBCreate") - data := setDataSimxLog(&input, inputLog) + data := setDataSimxLog(&input) var tx *gorm.DB if len(dbx) > 0 { @@ -164,14 +167,9 @@ func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e // return nil //} -func DeleteData(data *e.Installation, event *pl.Event, dbx ...*gorm.DB) error { +func DeleteSimgosData(data *esimgos.MInstalasi, event *pl.Event) error { pl.SetLogInfo(event, data, "started", "DBDelete") - var tx *gorm.DB - if len(dbx) > 0 { - tx = dbx[0] - } else { - tx = dg.I - } + var tx = dg.IS["simrs"] if err := tx.Delete(&data).Error; err != nil { event.Status = "failed"