|
|
@@ -154,32 +154,36 @@ type ConditionFieldCallback func(conditions *sql.Conditions, fieldName string, c
|
|
|
|
|
|
func Query[O any](tableName string, callbacks *Callbacks[response.InfosData[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),
|
|
|
+ }
|
|
|
+
|
|
|
if params == nil {
|
|
|
- return response.InfosData[O]{}, fserr.New("请求参数为空")
|
|
|
+ return errResponse, fserr.New("请求参数为空")
|
|
|
}
|
|
|
|
|
|
object := objects[0]
|
|
|
if object == nil {
|
|
|
- return response.InfosData[O]{}, fserr.New("领域实体为空")
|
|
|
+ return errResponse, fserr.New("领域实体为空")
|
|
|
}
|
|
|
|
|
|
dbExecutor := i.DBExecutor()
|
|
|
|
|
|
queryParams, ok := params.(request.Query)
|
|
|
if !ok {
|
|
|
- return response.InfosData[O]{}, fserr.New("请求参数不是Query接口")
|
|
|
+ return errResponse, fserr.New("请求参数不是Query接口")
|
|
|
}
|
|
|
|
|
|
e, ok := objects[0].(domain.Entity)
|
|
|
if !ok {
|
|
|
- return response.InfosData[O]{}, fserr.New("需要传递领域对象应该为实体")
|
|
|
+ return errResponse, fserr.New("需要传递领域对象应该为实体")
|
|
|
}
|
|
|
|
|
|
conditions := sql.NewConditions()
|
|
|
|
|
|
fields, err := sql_mapping.DefaultUsage(e)
|
|
|
if err != nil {
|
|
|
- return response.InfosData[O]{}, err
|
|
|
+ return errResponse, err
|
|
|
}
|
|
|
|
|
|
for _, field := range fields {
|
|
|
@@ -198,7 +202,7 @@ func Query[O any](tableName string, callbacks *Callbacks[response.InfosData[O]],
|
|
|
|
|
|
err = callbackBeforeDBOperate(callbacks, e, i, dbExecutor)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, response.InfosData[O]{})
|
|
|
+ return callbackOnErrorReturn(callbacks, e, err, i, errResponse)
|
|
|
}
|
|
|
|
|
|
results, totalCount, err := database.Query(dbExecutor, &sql.QueryExecuteParams{
|
|
|
@@ -208,18 +212,18 @@ func Query[O any](tableName string, callbacks *Callbacks[response.InfosData[O]],
|
|
|
PageSize: queryParams.GetPageSize(),
|
|
|
})
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, response.InfosData[O]{})
|
|
|
+ return callbackOnErrorReturn(callbacks, e, err, i, errResponse)
|
|
|
}
|
|
|
|
|
|
err = callbackAfterDBOperate(callbacks, e, i, dbExecutor)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, response.InfosData[O]{})
|
|
|
+ return callbackOnErrorReturn(callbacks, e, err, i, errResponse)
|
|
|
}
|
|
|
|
|
|
infos := make([]O, 0)
|
|
|
err = sql.ParseSqlResult(results, &infos)
|
|
|
if err != nil {
|
|
|
- return callbackOnErrorReturn(callbacks, e, err, i, response.InfosData[O]{})
|
|
|
+ return callbackOnErrorReturn(callbacks, e, err, i, errResponse)
|
|
|
}
|
|
|
|
|
|
output := response.InfosData[O]{
|
|
|
@@ -236,6 +240,13 @@ func GetByID[O any](tableName string, callbacks *Callbacks[O]) binding.ServiceFu
|
|
|
return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (O, error) {
|
|
|
var outputZero O
|
|
|
|
|
|
+ outputZeroValue := reflect.New(reflect.TypeOf(outputZero)).Elem()
|
|
|
+ if outputZeroValue.Kind() == reflect.Pointer {
|
|
|
+ outputZeroValue.Set(reflect.New(outputZeroValue.Type().Elem()))
|
|
|
+ }
|
|
|
+
|
|
|
+ outputZero = outputZeroValue.Interface().(O)
|
|
|
+
|
|
|
object := objects[0]
|
|
|
if object == nil {
|
|
|
return outputZero, fserr.New("领域实体为空")
|
|
|
@@ -243,11 +254,6 @@ func GetByID[O any](tableName string, callbacks *Callbacks[O]) binding.ServiceFu
|
|
|
|
|
|
dbExecutor := i.DBExecutor()
|
|
|
|
|
|
- outputZeroValue := reflect.Zero(reflect.TypeOf(outputZero))
|
|
|
- if outputZeroValue.Kind() == reflect.Pointer {
|
|
|
- outputZeroValue.Set(reflect.New(outputZeroValue.Type().Elem()))
|
|
|
- }
|
|
|
-
|
|
|
e, ok := objects[0].(domain.Entity)
|
|
|
if !ok {
|
|
|
return outputZero, fserr.New("需要传递领域对象应该为实体")
|