package entity import ( "git.sxidc.com/go-framework/baize/domain" "git.sxidc.com/go-framework/baize/infrastructure" "git.sxidc.com/go-framework/baize/infrastructure/database" ) type Callbacks[O any] struct { BeforeDBOperate func(e domain.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error AfterDBOperate func(e domain.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error OnSuccessReturn func(e domain.Entity, i *infrastructure.Infrastructure, output O) (O, error) OnErrorReturn func(e domain.Entity, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error) } func callbackBeforeDBOperate[O any](callbacks *Callbacks[O], e domain.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error { if callbacks == nil { return nil } if callbacks.BeforeDBOperate == nil { return callbacks.BeforeDBOperate(e, i, dbExecutor) } return nil } func callbackAfterDBOperate[O any](callbacks *Callbacks[O], e domain.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error { if callbacks == nil { return nil } if callbacks.AfterDBOperate == nil { return callbacks.AfterDBOperate(e, i, dbExecutor) } return nil } func callbackOnSuccessReturn[O any](callbacks *Callbacks[O], e domain.Entity, i *infrastructure.Infrastructure, output O) (O, error) { if callbacks == nil { return output, nil } if callbacks.OnSuccessReturn == nil { return callbacks.OnSuccessReturn(e, i, output) } return output, nil } func callbackOnErrorReturn[O any](callbacks *Callbacks[O], e domain.Entity, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error) { if callbacks == nil { return defaultErrOutput, err } if callbacks.OnErrorReturn == nil { return callbacks.OnErrorReturn(e, err, i, defaultErrOutput) } return defaultErrOutput, err }