优化模块租户检查逻辑,重构数据结构并简化代码
This commit is contained in:
@@ -10,7 +10,6 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"gitee.com/red-future---jilin-g/common/log/consts"
|
||||
"reflect"
|
||||
"time"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/beans"
|
||||
@@ -643,7 +642,7 @@ func (m *MongoDB) SaveOrUpdate(ctx context.Context, filter []bson.M, update []bs
|
||||
return bulkResult, nil
|
||||
}
|
||||
|
||||
func BuildUpdateFilter(ctx context.Context, req interface{}) (filter bson.M, err error) {
|
||||
func BuildUpdateData(ctx context.Context, req interface{}) (filter bson.M, err error) {
|
||||
_ = ctx
|
||||
filter = bson.M{}
|
||||
reqMap := gconv.Map(req)
|
||||
@@ -654,55 +653,3 @@ func BuildUpdateFilter(ctx context.Context, req interface{}) (filter bson.M, err
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// EntityToBson 将 *entity/entity 转换为 bson.M
|
||||
func EntityToBson(entity interface{}) (bson.M, error) {
|
||||
return EntityToBsonWithFilter(entity, false)
|
||||
}
|
||||
|
||||
// EntityToBsonWithFilter 将 *entity/entity 转换为 bson.M,并可选择是否过滤空值
|
||||
func EntityToBsonWithFilter(entity interface{}, filterEmpty bool) (bson.M, error) {
|
||||
if entity == nil {
|
||||
return nil, fmt.Errorf("传入的 entity 实例为 nil")
|
||||
}
|
||||
bsonBytes, err := bson.Marshal(entity)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("entity 序列化为 BSON 字节流失败:%w", err)
|
||||
}
|
||||
var bsonMap bson.M
|
||||
err = bson.Unmarshal(bsonBytes, &bsonMap)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("BSON 字节流反序列化为 bson.M 失败:%w", err)
|
||||
}
|
||||
if filterEmpty {
|
||||
for key, value := range bsonMap {
|
||||
if isEmptyWithZero(value) {
|
||||
delete(bsonMap, key)
|
||||
}
|
||||
}
|
||||
}
|
||||
return bsonMap, nil
|
||||
}
|
||||
|
||||
// isEmptyWithZero 判断是否为空值,但保留 int 类型的 0 值
|
||||
func isEmptyWithZero(value interface{}) bool {
|
||||
if value == nil {
|
||||
return true
|
||||
}
|
||||
rv := reflect.ValueOf(value)
|
||||
kind := rv.Kind()
|
||||
if kind == reflect.Ptr {
|
||||
if rv.IsNil() {
|
||||
return true
|
||||
}
|
||||
kind = rv.Elem().Kind()
|
||||
}
|
||||
switch kind {
|
||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
|
||||
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,
|
||||
reflect.Float32, reflect.Float64:
|
||||
return false
|
||||
default:
|
||||
return g.IsEmpty(value)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user