215 lines
4.0 KiB
Go
215 lines
4.0 KiB
Go
package unit
|
|
|
|
import (
|
|
pl "simrs-vx/pkg/logger"
|
|
|
|
dg "github.com/karincake/apem/db-gorm-pg"
|
|
d "github.com/karincake/dodol"
|
|
"gorm.io/gorm"
|
|
|
|
e "simrs-vx/internal/domain/main-entities/unit"
|
|
esimgos "simrs-vx/internal/domain/simgos-entities/unit"
|
|
esync "simrs-vx/internal/domain/sync-entities/log"
|
|
)
|
|
|
|
const source = "unit"
|
|
|
|
func Create(input e.CreateDto) (*d.Data, error) {
|
|
var (
|
|
txSync = dg.I.Begin()
|
|
txSimgos = dg.IS["simrs"].Begin()
|
|
)
|
|
|
|
event := pl.Event{
|
|
Feature: "Create",
|
|
Source: source,
|
|
}
|
|
|
|
// Start log
|
|
pl.SetLogInfo(&event, input, "started", "create")
|
|
|
|
// STEP 1: Insert to simgos
|
|
sgData, err := CreateSimgosData(input, &event, txSimgos)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// STEP 2: Insert to Link
|
|
syncLink, err := CreateLinkData(*input.Id, sgData.Kode, &event, txSync)
|
|
if err != nil {
|
|
txSimgos.Rollback()
|
|
return nil, err
|
|
}
|
|
|
|
// STEP 3: Commit two trx
|
|
if err = txSync.Commit().Error; err != nil {
|
|
txSync.Rollback()
|
|
txSimgos.Rollback()
|
|
return nil, err
|
|
}
|
|
|
|
if err = txSimgos.Commit().Error; err != nil {
|
|
// STEP 4: Rollback Partial
|
|
go func() {
|
|
_ = DeleteLinkData(syncLink, &event)
|
|
}()
|
|
return nil, err
|
|
}
|
|
|
|
pl.SetLogInfo(&event, nil, "complete")
|
|
|
|
return &d.Data{
|
|
Meta: d.II{
|
|
"source": source,
|
|
"structure": "single-data",
|
|
"status": "created",
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
|
event := pl.Event{
|
|
Feature: "Create",
|
|
Source: source,
|
|
}
|
|
|
|
// Start log
|
|
pl.SetLogInfo(&event, input, "started", "create")
|
|
|
|
err := dg.I.Transaction(func(tx *gorm.DB) error {
|
|
// InsertSimxLog
|
|
if err := CreateLogData(input, &event, tx); err != nil {
|
|
return err
|
|
}
|
|
|
|
pl.SetLogInfo(&event, nil, "complete")
|
|
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
pl.SetLogInfo(&event, nil, "complete")
|
|
|
|
return &d.Data{
|
|
Meta: d.II{
|
|
"source": source,
|
|
"structure": "single-data",
|
|
"status": "created",
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func Update(input e.UpdateDto) (*d.Data, error) {
|
|
var (
|
|
txSimgos = dg.IS["simrs"].Begin()
|
|
err error
|
|
)
|
|
|
|
event := pl.Event{
|
|
Feature: "Update",
|
|
Source: source,
|
|
}
|
|
|
|
// Start log
|
|
pl.SetLogInfo(&event, input, "started", "update")
|
|
|
|
// STEP 1: Get Installation Link
|
|
syncLink, err := ReadDetailLinkData(*input.Id, &event)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Step 2: Update Simgos
|
|
err = UpdateSimgosData(input, syncLink, &event, txSimgos)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// STEP 4: Commit two trx
|
|
if err = txSimgos.Commit().Error; err != nil {
|
|
txSimgos.Rollback()
|
|
return nil, err
|
|
}
|
|
|
|
pl.SetLogInfo(&event, nil, "complete")
|
|
|
|
return &d.Data{
|
|
Meta: d.IS{
|
|
"source": source,
|
|
"structure": "single-data",
|
|
"status": "updated",
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func Delete(input e.DeleteDto) (*d.Data, error) {
|
|
var (
|
|
txSync = dg.I.Begin()
|
|
txSimgos = dg.IS["simrs"].Begin()
|
|
sgData *esimgos.MPloy
|
|
err error
|
|
)
|
|
|
|
event := pl.Event{
|
|
Feature: "Delete",
|
|
Source: source,
|
|
}
|
|
|
|
// Start log
|
|
pl.SetLogInfo(&event, input, "started", "delete")
|
|
|
|
// STEP 1: Get Installation Link
|
|
syncLink, err := ReadDetailLinkData(*input.Id, &event)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// STEP 2: Get Simgos
|
|
sgData, err = ReadDetailSimgosData(uint16(syncLink.Simgos_Id), &event)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// STEP 3: Delete M_Poly Simgos
|
|
err = HardDeleteSimgosData(sgData, &event, txSimgos)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// STEP 4: Delete Installation Link
|
|
err = DeleteLinkData(syncLink, &event, txSync)
|
|
if err != nil {
|
|
txSimgos.Rollback()
|
|
return nil, err
|
|
}
|
|
|
|
// STEP 4: Commit two trx
|
|
if err = txSync.Commit().Error; err != nil {
|
|
txSync.Rollback()
|
|
txSimgos.Rollback()
|
|
return nil, err
|
|
}
|
|
|
|
if err = txSimgos.Commit().Error; err != nil {
|
|
// STEP 5: Rollback Partial
|
|
go func() {
|
|
_, _ = CreateLinkData(uint(*input.Id), sgData.Kode, &event)
|
|
}()
|
|
return nil, err
|
|
}
|
|
|
|
pl.SetLogInfo(&event, nil, "complete")
|
|
|
|
return &d.Data{
|
|
Meta: d.IS{
|
|
"source": source,
|
|
"structure": "single-data",
|
|
"status": "deleted",
|
|
},
|
|
}, nil
|
|
|
|
}
|