package value_object 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(valueObject domain.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error AfterDBOperate func(valueObject domain.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error OnSuccessReturn func(valueObject domain.ValueObject, i *infrastructure.Infrastructure, output O) (O, error) OnErrorReturn func(valueObject domain.ValueObject, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error) } func callbackBeforeDBOperate[O any](callbacks *Callbacks[O], valueObject domain.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error { if callbacks == nil { return nil } if callbacks.BeforeDBOperate == nil { return callbacks.BeforeDBOperate(valueObject, i, dbExecutor) } return nil } func callbackAfterDBOperate[O any](callbacks *Callbacks[O], valueObject domain.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error { if callbacks == nil { return nil } if callbacks.AfterDBOperate == nil { return callbacks.AfterDBOperate(valueObject, i, dbExecutor) } return nil } func callbackOnSuccessReturn[O any](callbacks *Callbacks[O], valueObject domain.ValueObject, i *infrastructure.Infrastructure, output O) (O, error) { if callbacks == nil { return output, nil } if callbacks.OnSuccessReturn == nil { return callbacks.OnSuccessReturn(valueObject, i, output) } return output, nil } func callbackOnErrorReturn[O any](callbacks *Callbacks[O], valueObject domain.ValueObject, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error) { if callbacks == nil { return defaultErrOutput, err } if callbacks.OnErrorReturn == nil { return callbacks.OnErrorReturn(valueObject, err, i, defaultErrOutput) } return defaultErrOutput, err }