|
|
@@ -16,7 +16,7 @@ import (
|
|
|
"reflect"
|
|
|
)
|
|
|
|
|
|
-func Create(tableName string, callbacks *Callbacks[string]) binding.ServiceFunc[string] {
|
|
|
+func Create(tableName string, callbacks *CreateCallbacks) binding.ServiceFunc[string] {
|
|
|
return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (string, error) {
|
|
|
object := objects[0]
|
|
|
if object == nil {
|
|
|
@@ -32,17 +32,22 @@ func Create(tableName string, callbacks *Callbacks[string]) binding.ServiceFunc[
|
|
|
|
|
|
err := e.GenerateID()
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, "")
|
|
|
+ return callbackOnCreateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
err = e.ForCreate()
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, "")
|
|
|
+ return callbackOnCreateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
- err = callbackBeforeDBOperate(callbacks, e, i, dbExecutor)
|
|
|
+ prepared, err := callbackPrepareCreate(callbacks, e, i)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, "")
|
|
|
+ return callbackOnCreateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
+ }
|
|
|
+
|
|
|
+ err = callbackBeforeCreate(callbacks, e, prepared, i, nil)
|
|
|
+ if err != nil {
|
|
|
+ return callbackOnCreateErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
err = database.InsertEntity(dbExecutor, tableName, e)
|
|
|
@@ -51,19 +56,19 @@ func Create(tableName string, callbacks *Callbacks[string]) binding.ServiceFunc[
|
|
|
err = fserr.New(e.DomainCNName() + "已存在")
|
|
|
}
|
|
|
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, "")
|
|
|
+ return callbackOnCreateErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
- err = callbackAfterDBOperate(callbacks, e, i, dbExecutor)
|
|
|
+ err = callbackAfterCreate(callbacks, e, prepared, i, nil)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, "")
|
|
|
+ return callbackOnCreateErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
- return callbackOnSuccessReturn(callbacks, e, i, e.GetID())
|
|
|
+ return callbackOnCreateSuccessReturn(callbacks, e, prepared, i, e.GetID())
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func Delete(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any] {
|
|
|
+func Delete(tableName string, callbacks *DeleteCallbacks) binding.ServiceFunc[any] {
|
|
|
return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (any, error) {
|
|
|
object := objects[0]
|
|
|
if object == nil {
|
|
|
@@ -79,29 +84,34 @@ func Delete(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any
|
|
|
|
|
|
err := e.ForDelete()
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnDeleteErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
+ }
|
|
|
+
|
|
|
+ prepared, err := callbackPrepareDelete(callbacks, e, i)
|
|
|
+ if err != nil {
|
|
|
+ return nil, callbackOnDeleteErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
- err = callbackBeforeDBOperate(callbacks, e, i, dbExecutor)
|
|
|
+ err = callbackBeforeDelete(callbacks, e, prepared, i, nil)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnDeleteErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
err = database.DeleteEntity(dbExecutor, tableName, e)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnDeleteErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
- err = callbackAfterDBOperate(callbacks, e, i, dbExecutor)
|
|
|
+ err = callbackAfterDelete(callbacks, e, prepared, i, nil)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnDeleteErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
- return callbackOnSuccessReturn(callbacks, e, i, nil)
|
|
|
+ return nil, callbackOnDeleteSuccessReturn(callbacks, e, prepared, i)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func Update(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any] {
|
|
|
+func Update(tableName string, callbacks *UpdateCallbacks) binding.ServiceFunc[any] {
|
|
|
return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (any, error) {
|
|
|
object := objects[0]
|
|
|
if object == nil {
|
|
|
@@ -117,7 +127,7 @@ func Update(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any
|
|
|
|
|
|
err := e.ForUpdate()
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
exist, err := database.CheckExist(dbExecutor, &sql.CheckExistExecuteParams{
|
|
|
@@ -125,36 +135,41 @@ func Update(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any
|
|
|
Conditions: sql.NewConditions().Equal(entity.ColumnID, e.GetID()),
|
|
|
})
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
if !exist {
|
|
|
err := fserr.New(e.DomainCNName() + "不存在")
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
- err = callbackBeforeDBOperate(callbacks, e, i, dbExecutor)
|
|
|
+ prepared, err := callbackPrepareUpdate(callbacks, e, i)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
+ }
|
|
|
+
|
|
|
+ err = callbackBeforeUpdate(callbacks, e, prepared, i, nil)
|
|
|
+ if err != nil {
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
err = database.UpdateEntity(dbExecutor, tableName, e)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
- err = callbackAfterDBOperate(callbacks, e, i, dbExecutor)
|
|
|
+ err = callbackAfterUpdate(callbacks, e, prepared, i, nil)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
- return callbackOnSuccessReturn(callbacks, e, i, nil)
|
|
|
+ return nil, callbackOnUpdateSuccessReturn(callbacks, e, prepared, i)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
type ConditionFieldCallback func(conditions *sql.Conditions, fieldName string, columnName string, value any) (hasDeal bool)
|
|
|
|
|
|
-func Query[O any](tableName string, callbacks *Callbacks[response.InfosData[O]], conditionFieldCallback ConditionFieldCallback) binding.ServiceFunc[response.InfosData[O]] {
|
|
|
+func Query[O any](tableName string, callbacks *QueryCallbacks[O], conditionFieldCallback ConditionFieldCallback) binding.ServiceFunc[response.InfosData[O]] {
|
|
|
return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (response.InfosData[O], error) {
|
|
|
errResponse := response.InfosData[O]{
|
|
|
Infos: make([]O, 0),
|
|
|
@@ -202,9 +217,9 @@ func Query[O any](tableName string, callbacks *Callbacks[response.InfosData[O]],
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- err = callbackBeforeDBOperate(callbacks, e, i, dbExecutor)
|
|
|
+ err = callbackBeforeQuery(callbacks, e, i)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, errResponse)
|
|
|
+ return callbackOnQueryErrorReturn(callbacks, e, err, i)
|
|
|
}
|
|
|
|
|
|
results, totalCount, err := database.Query(dbExecutor, &sql.QueryExecuteParams{
|
|
|
@@ -214,18 +229,18 @@ func Query[O any](tableName string, callbacks *Callbacks[response.InfosData[O]],
|
|
|
PageSize: queryParams.GetPageSize(),
|
|
|
})
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, errResponse)
|
|
|
+ return callbackOnQueryErrorReturn(callbacks, e, err, i)
|
|
|
}
|
|
|
|
|
|
- err = callbackAfterDBOperate(callbacks, e, i, dbExecutor)
|
|
|
+ err = callbackAfterQuery(callbacks, e, i)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, errResponse)
|
|
|
+ return callbackOnQueryErrorReturn(callbacks, e, err, i)
|
|
|
}
|
|
|
|
|
|
infos := make([]O, 0)
|
|
|
err = sql.ParseSqlResult(results, &infos)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, errResponse)
|
|
|
+ return callbackOnQueryErrorReturn(callbacks, e, err, i)
|
|
|
}
|
|
|
|
|
|
output := response.InfosData[O]{
|
|
|
@@ -234,11 +249,11 @@ func Query[O any](tableName string, callbacks *Callbacks[response.InfosData[O]],
|
|
|
PageNo: queryParams.GetPageNo(),
|
|
|
}
|
|
|
|
|
|
- return callbackOnSuccessReturn(callbacks, e, i, output)
|
|
|
+ return callbackOnQuerySuccessReturn(callbacks, e, i, output)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func GetByID[O any](tableName string, callbacks *Callbacks[O]) binding.ServiceFunc[O] {
|
|
|
+func GetByID[O any](tableName string, callbacks *QueryByIDCallbacks[O]) binding.ServiceFunc[O] {
|
|
|
return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (O, error) {
|
|
|
outputZero := reflectutils.Zero[O]()
|
|
|
|
|
|
@@ -256,12 +271,12 @@ func GetByID[O any](tableName string, callbacks *Callbacks[O]) binding.ServiceFu
|
|
|
|
|
|
err := e.CheckFieldID()
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, outputZero)
|
|
|
+ return callbackOnQueryByIDErrorReturn(callbacks, e, err, i)
|
|
|
}
|
|
|
|
|
|
- err = callbackBeforeDBOperate(callbacks, e, i, dbExecutor)
|
|
|
+ err = callbackBeforeQueryByID(callbacks, e, i)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, outputZero)
|
|
|
+ return callbackOnQueryByIDErrorReturn(callbacks, e, err, i)
|
|
|
}
|
|
|
|
|
|
result, err := database.QueryOne(dbExecutor, &sql.QueryOneExecuteParams{
|
|
|
@@ -273,25 +288,25 @@ func GetByID[O any](tableName string, callbacks *Callbacks[O]) binding.ServiceFu
|
|
|
err = fserr.New(e.DomainCNName() + "不存在")
|
|
|
}
|
|
|
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, outputZero)
|
|
|
+ return callbackOnQueryByIDErrorReturn(callbacks, e, err, i)
|
|
|
}
|
|
|
|
|
|
- err = callbackAfterDBOperate(callbacks, e, i, dbExecutor)
|
|
|
+ err = callbackAfterQueryByID(callbacks, e, i)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, outputZero)
|
|
|
+ return callbackOnQueryByIDErrorReturn(callbacks, e, err, i)
|
|
|
}
|
|
|
|
|
|
info := reflectutils.Zero[O]()
|
|
|
err = sql.ParseSqlResult(result, &info)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, outputZero)
|
|
|
+ return callbackOnQueryByIDErrorReturn(callbacks, e, err, i)
|
|
|
}
|
|
|
|
|
|
- return callbackOnSuccessReturn(callbacks, e, i, info)
|
|
|
+ return callbackOnQueryByIDSuccessReturn(callbacks, e, i, info)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func CreateTx(tableName string, callbacks *Callbacks[string]) binding.ServiceFunc[string] {
|
|
|
+func CreateTx(tableName string, callbacks *CreateCallbacks) binding.ServiceFunc[string] {
|
|
|
return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (string, error) {
|
|
|
object := objects[0]
|
|
|
if object == nil {
|
|
|
@@ -307,16 +322,21 @@ func CreateTx(tableName string, callbacks *Callbacks[string]) binding.ServiceFun
|
|
|
|
|
|
err := e.GenerateID()
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, "")
|
|
|
+ return callbackOnCreateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
err = e.ForCreate()
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, "")
|
|
|
+ return callbackOnCreateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
+ }
|
|
|
+
|
|
|
+ prepared, err := callbackPrepareCreate(callbacks, e, i)
|
|
|
+ if err != nil {
|
|
|
+ return callbackOnCreateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
err = database.Transaction(dbExecutor, func(tx database.Executor) error {
|
|
|
- err = callbackBeforeDBOperate(callbacks, e, i, tx)
|
|
|
+ err = callbackBeforeCreate(callbacks, e, prepared, i, tx)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -330,7 +350,7 @@ func CreateTx(tableName string, callbacks *Callbacks[string]) binding.ServiceFun
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- err = callbackAfterDBOperate(callbacks, e, i, tx)
|
|
|
+ err = callbackAfterCreate(callbacks, e, prepared, i, tx)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -338,14 +358,14 @@ func CreateTx(tableName string, callbacks *Callbacks[string]) binding.ServiceFun
|
|
|
return nil
|
|
|
})
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, "")
|
|
|
+ return callbackOnCreateErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
- return callbackOnSuccessReturn(callbacks, e, i, e.GetID())
|
|
|
+ return callbackOnCreateSuccessReturn(callbacks, e, prepared, i, e.GetID())
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func DeleteTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any] {
|
|
|
+func DeleteTx(tableName string, callbacks *DeleteCallbacks) binding.ServiceFunc[any] {
|
|
|
return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (any, error) {
|
|
|
object := objects[0]
|
|
|
if object == nil {
|
|
|
@@ -361,11 +381,16 @@ func DeleteTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
|
|
|
|
|
|
err := e.CheckFieldID()
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnDeleteErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
+ }
|
|
|
+
|
|
|
+ prepared, err := callbackPrepareDelete(callbacks, e, i)
|
|
|
+ if err != nil {
|
|
|
+ return nil, callbackOnDeleteErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
err = database.Transaction(dbExecutor, func(tx database.Executor) error {
|
|
|
- err = callbackBeforeDBOperate(callbacks, e, i, tx)
|
|
|
+ err = callbackBeforeDelete(callbacks, e, prepared, i, tx)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -375,7 +400,7 @@ func DeleteTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- err = callbackAfterDBOperate(callbacks, e, i, tx)
|
|
|
+ err = callbackAfterDelete(callbacks, e, prepared, i, tx)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -383,14 +408,14 @@ func DeleteTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
|
|
|
return nil
|
|
|
})
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnDeleteErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
- return callbackOnSuccessReturn(callbacks, e, i, nil)
|
|
|
+ return nil, callbackOnDeleteSuccessReturn(callbacks, e, prepared, i)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func UpdateTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any] {
|
|
|
+func UpdateTx(tableName string, callbacks *UpdateCallbacks) binding.ServiceFunc[any] {
|
|
|
return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (any, error) {
|
|
|
object := objects[0]
|
|
|
if object == nil {
|
|
|
@@ -406,7 +431,7 @@ func UpdateTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
|
|
|
|
|
|
err := e.CheckFieldID()
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
exist, err := database.CheckExist(dbExecutor, &sql.CheckExistExecuteParams{
|
|
|
@@ -414,16 +439,20 @@ func UpdateTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
|
|
|
Conditions: sql.NewConditions().Equal(entity.ColumnID, e.GetID()),
|
|
|
})
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
if !exist {
|
|
|
- err := fserr.New(e.DomainCNName() + "不存在")
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, make(map[string]any), fserr.New(e.DomainCNName()+"不存在"), i)
|
|
|
+ }
|
|
|
+
|
|
|
+ prepared, err := callbackPrepareUpdate(callbacks, e, i)
|
|
|
+ if err != nil {
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, make(map[string]any), err, i)
|
|
|
}
|
|
|
|
|
|
err = database.Transaction(dbExecutor, func(tx database.Executor) error {
|
|
|
- err = callbackBeforeDBOperate(callbacks, e, i, tx)
|
|
|
+ err = callbackBeforeUpdate(callbacks, e, prepared, i, tx)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -433,7 +462,7 @@ func UpdateTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- err = callbackAfterDBOperate(callbacks, e, i, tx)
|
|
|
+ err = callbackAfterUpdate(callbacks, e, prepared, i, tx)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -441,9 +470,9 @@ func UpdateTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
|
|
|
return nil
|
|
|
})
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, nil)
|
|
|
+ return nil, callbackOnUpdateErrorReturn(callbacks, e, prepared, err, i)
|
|
|
}
|
|
|
|
|
|
- return callbackOnSuccessReturn(callbacks, e, i, nil)
|
|
|
+ return nil, callbackOnUpdateSuccessReturn(callbacks, e, prepared, i)
|
|
|
}
|
|
|
}
|