diff --git a/internal/use-case/_plugin-template/modifier/modifire.go b/internal/use-case/_plugin-template/modifier/modifire.go index c6696963..1c546e32 100644 --- a/internal/use-case/_plugin-template/modifier/modifire.go +++ b/internal/use-case/_plugin-template/modifier/modifire.go @@ -14,7 +14,7 @@ func ModifInput(input *e.Createdto, data *e.Single, tx *gorm.DB) error { // a sampel of utilizing transaction func CheckData(input *e.Createdto, data *e.Single, tx *gorm.DB) error { - tx.Where("name = ?", input.Name) + tx.Where("Name = ?", input.Name) input.Name = "Prefix_" + input.Name return nil } diff --git a/internal/use-case/_use-case-template/crud/case.go b/internal/use-case/_use-case-template/crud/case.go index 1c0e3aff..cf617ff7 100644 --- a/internal/use-case/_use-case-template/crud/case.go +++ b/internal/use-case/_use-case-template/crud/case.go @@ -7,6 +7,7 @@ package crud import ( dg "github.com/karincake/apem/db-gorm-pg" d "github.com/karincake/dodol" + "gorm.io/gorm" e "simrs-vx/internal/domain/main-entities/single" ) @@ -14,10 +15,25 @@ import ( const source = "crud" func Create(input e.Createdto) (*d.Data, error) { - result, err := CreateData(input) - if err != nil { - return nil, err - } + err := dg.I.Transaction(func(tx *gorm.DB) error { + for i := range createPreMw { + if err := createPreMw[i](&input, &data, dg.I); err != nil { + return nil + } + } + + if err := dg.I.Create(&data).Error; err != nil { + return nil + } + + for i := range createPostMw { + if err := createPostMw[i](&input, &data, dg.I); err != nil { + return nil + } + } + + return nil + }) return &d.Data{ Meta: d.II{ diff --git a/internal/use-case/_use-case-template/crud/lib.go b/internal/use-case/_use-case-template/crud/lib.go index 0c774e0b..0283c7d8 100644 --- a/internal/use-case/_use-case-template/crud/lib.go +++ b/internal/use-case/_use-case-template/crud/lib.go @@ -7,28 +7,19 @@ import ( "gorm.io/gorm" ) -func CreateData(input e.Createdto) (*e.Single, error) { +func CreateData(input e.Createdto, tx ...*gorm.DB) (*e.Single, error) { data := e.Single{} - err := dg.I.Transaction(func(tx *gorm.DB) error { - for i := range createPreMw { - if err := createPreMw[i](&input, &data, dg.I); err != nil { - return nil - } - } + var db *gorm.DB + if tx != nil { + db = tx + } else { + db = dg.I + } - if err := dg.I.Create(&data).Error; err != nil { - return nil - } - - for i := range createPostMw { - if err := createPostMw[i](&input, &data, dg.I); err != nil { - return nil - } - } - - return nil - }) + if err := dg.I.Create(&data).Error; err != nil { + return nil, err + } return &data, err }