unit finish
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package installation
|
||||
|
||||
import (
|
||||
"errors"
|
||||
esimgos "simrs-vx/internal/domain/simgos-entities/installation"
|
||||
esync "simrs-vx/internal/domain/sync-entities/log"
|
||||
|
||||
@@ -38,22 +37,23 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
// STEP 2: Insert to Link
|
||||
if err = CreateLinkData(*input.Id, sgData.No_Instalasi, &event, txSync); err != nil {
|
||||
syncLink, err := CreateLinkData(*input.Id, sgData.No_Instalasi, &event, txSync)
|
||||
if err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 3: Commit two trx
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
txSimgos.Rollback()
|
||||
if err = txSync.Commit().Error; err != nil {
|
||||
txSync.Rollback()
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = txSync.Commit().Error; err != nil {
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
// STEP 4: Rollback Partial
|
||||
go func() {
|
||||
_ = DeleteSimgosData(sgData, &event)
|
||||
_ = DeleteLinkData(syncLink, &event)
|
||||
}()
|
||||
return nil, err
|
||||
}
|
||||
@@ -106,9 +106,7 @@ func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
|
||||
func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
var (
|
||||
txSync = dg.I.Begin()
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
sgData *esimgos.MInstalasi
|
||||
err error
|
||||
)
|
||||
|
||||
@@ -121,51 +119,23 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
pl.SetLogInfo(&event, input, "started", "update")
|
||||
|
||||
// STEP 1: Get Installation Link
|
||||
syncLink, errGetLink := ReadDetailLinkData(*input.Id, &event)
|
||||
if errGetLink != nil {
|
||||
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, err
|
||||
}
|
||||
syncLink, err := ReadDetailLinkData(*input.Id, &event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if errGetLink != nil && errors.Is(errGetLink, gorm.ErrRecordNotFound) {
|
||||
// STEP 2.1: Insert to simgos
|
||||
sgData, err = CreateSimgosData(input.CreateDto, &event, txSimgos)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 2.2: Insert to Link
|
||||
simxId := uint(*input.Id)
|
||||
if err = CreateLinkData(simxId, sgData.No_Instalasi, &event, txSync); err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
// Step 3.1: Update Simgos
|
||||
err = UpdateSimgosData(input, syncLink, &event, txSimgos)
|
||||
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()
|
||||
txSync.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if errGetLink != nil {
|
||||
if err = txSync.Commit().Error; err != nil {
|
||||
// STEP 5.1: Rollback Partial
|
||||
go func() {
|
||||
_ = DeleteSimgosData(sgData, &event)
|
||||
}()
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
return &d.Data{
|
||||
@@ -194,52 +164,43 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
pl.SetLogInfo(&event, input, "started", "delete")
|
||||
|
||||
// STEP 1: Get Installation Link
|
||||
syncLink, errGetLink := ReadDetailLinkData(*input.Id, &event)
|
||||
if errGetLink != nil {
|
||||
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, err
|
||||
}
|
||||
syncLink, err := ReadDetailLinkData(*input.Id, &event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if errGetLink == nil {
|
||||
// STEP 2: Get Simgos
|
||||
sgData, err = ReadDetailSimgosData(uint16(syncLink.Simgos_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_Instalation Simgos
|
||||
err = DeleteSimgosData(sgData, &event, txSimgos)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// STEP 3: Delete M_Instalation Simgos
|
||||
err = SoftDeleteSimgosData(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: Delete Installation Link
|
||||
err = DeleteLinkData(syncLink, &event, txSync)
|
||||
if err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 4: Commit two trx
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
txSimgos.Rollback()
|
||||
txSync.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 = txSync.Commit().Error; err != nil {
|
||||
// STEP 5: Rollback Partial
|
||||
go func() {
|
||||
inputRollback := e.UpdateDto{
|
||||
CreateDto: e.CreateDto{
|
||||
Name: sgData.Nama_Instalasi,
|
||||
},
|
||||
}
|
||||
_ = UpdateSimgosData(inputRollback, syncLink, &event)
|
||||
}()
|
||||
return nil, err
|
||||
}
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
// STEP 5: Rollback Partial
|
||||
go func() {
|
||||
_, _ = CreateLinkData(uint(*input.Id), sgData.No_Instalasi, &event)
|
||||
}()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
esynclog "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"
|
||||
@@ -45,7 +46,9 @@ func ReadDetailSimgosData(simgosId uint16, event *pl.Event) (*esimgos.MInstalasi
|
||||
if err := tx.
|
||||
Where("\"no_instalasi\" = ?", simgosId).
|
||||
First(&data).Error; err != nil {
|
||||
return nil, err
|
||||
if processedErr := pu.HandleReadError(err, event, source, simgosId, data); processedErr != nil {
|
||||
return nil, processedErr
|
||||
}
|
||||
}
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
@@ -79,7 +82,32 @@ func UpdateSimgosData(input e.UpdateDto, dataSimgos *esync.InstallationLink, eve
|
||||
return nil
|
||||
}
|
||||
|
||||
func DeleteSimgosData(data *esimgos.MInstalasi, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
func HardDeleteSimgosData(data *esimgos.MInstalasi, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
pl.SetLogInfo(event, data, "started", "DBDelete")
|
||||
|
||||
var tx *gorm.DB
|
||||
if len(dbx) > 0 {
|
||||
tx = dbx[0]
|
||||
} else {
|
||||
tx = dg.IS["simrs"]
|
||||
}
|
||||
|
||||
if err := tx.
|
||||
Delete(&data).Error; err != nil {
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-delete-fail",
|
||||
Detail: "Database delete failed",
|
||||
Raw: err,
|
||||
}
|
||||
return pl.SetLogError(event, data)
|
||||
}
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return nil
|
||||
}
|
||||
|
||||
func SoftDeleteSimgosData(data *esimgos.MInstalasi, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
pl.SetLogInfo(event, data, "started", "DBDelete")
|
||||
|
||||
var tx *gorm.DB
|
||||
@@ -105,7 +133,7 @@ func DeleteSimgosData(data *esimgos.MInstalasi, event *pl.Event, dbx ...*gorm.DB
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*esync.InstallationLink, error) {
|
||||
pl.SetLogInfo(event, nil, "started", "DBCreate")
|
||||
data := setDataSimxLink(simxId, simgosId)
|
||||
|
||||
@@ -117,11 +145,11 @@ func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) err
|
||||
}
|
||||
|
||||
if err := tx.Create(&data).Error; err != nil {
|
||||
return plh.HandleCreateError(data, event, err)
|
||||
return nil, plh.HandleCreateError(data, event, err)
|
||||
}
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return nil
|
||||
return &data, nil
|
||||
}
|
||||
|
||||
func ReadDetailLinkData(simxId uint16, event *pl.Event) (*esync.InstallationLink, error) {
|
||||
@@ -133,7 +161,9 @@ func ReadDetailLinkData(simxId uint16, event *pl.Event) (*esync.InstallationLink
|
||||
if err := tx.
|
||||
Where("\"Simx_Id\" = ?", simxId).
|
||||
First(&data).Error; err != nil {
|
||||
return nil, err
|
||||
if processedErr := pu.HandleReadError(err, event, source, simxId, data); processedErr != nil {
|
||||
return nil, processedErr
|
||||
}
|
||||
}
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
|
||||
Reference in New Issue
Block a user