implement remote call for remote action
This commit is contained in:
		
							
								
								
									
										68
									
								
								dbs/dbs.go
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								dbs/dbs.go
									
									
									
									
									
								
							@@ -18,6 +18,7 @@ const (
 | 
			
		||||
	LT
 | 
			
		||||
	GT
 | 
			
		||||
	EQUAL
 | 
			
		||||
	NOT
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var str = [...]string{
 | 
			
		||||
@@ -29,6 +30,7 @@ var str = [...]string{
 | 
			
		||||
	"lt",
 | 
			
		||||
	"gt",
 | 
			
		||||
	"equal",
 | 
			
		||||
	"not",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m Operator) String() string {
 | 
			
		||||
@@ -36,6 +38,12 @@ func (m Operator) String() string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m Operator) ToMongoEOperator(k string, value interface{}) bson.E {
 | 
			
		||||
	defer func() {
 | 
			
		||||
		if r := recover(); r != nil {
 | 
			
		||||
			fmt.Println("Recovered. Error:\n", r)
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
	defaultValue := bson.E{Key: k, Value: bson.M{"$regex": ToValueOperator(StringToOperator(m.String()), value)}}
 | 
			
		||||
	switch m {
 | 
			
		||||
	case LIKE:
 | 
			
		||||
		return bson.E{Key: k, Value: bson.M{"$regex": ToValueOperator(StringToOperator(m.String()), value)}}
 | 
			
		||||
@@ -53,12 +61,43 @@ func (m Operator) ToMongoEOperator(k string, value interface{}) bson.E {
 | 
			
		||||
		return bson.E{Key: k, Value: bson.M{"$lt": ToValueOperator(StringToOperator(m.String()), value)}}
 | 
			
		||||
	case EQUAL:
 | 
			
		||||
		return bson.E{Key: k, Value: value}
 | 
			
		||||
	case NOT:
 | 
			
		||||
		v := value.(Filters)
 | 
			
		||||
		orList := bson.A{}
 | 
			
		||||
		andList := bson.A{}
 | 
			
		||||
		f := bson.D{}
 | 
			
		||||
		for k, filter := range v.Or {
 | 
			
		||||
			for _, ff := range filter {
 | 
			
		||||
				orList = append(orList, StringToOperator(ff.Operator).ToMongoOperator(k, ff.Value))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		for k, filter := range v.And {
 | 
			
		||||
			for _, ff := range filter {
 | 
			
		||||
				andList = append(andList, StringToOperator(ff.Operator).ToMongoOperator(k, ff.Value))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if len(orList) > 0 && len(andList) == 0 {
 | 
			
		||||
			f = bson.D{{"$or", orList}}
 | 
			
		||||
		} else {
 | 
			
		||||
			if len(orList) > 0 {
 | 
			
		||||
				andList = append(andList, bson.M{"$or": orList})
 | 
			
		||||
			}
 | 
			
		||||
			f = bson.D{{"$and", andList}}
 | 
			
		||||
		}
 | 
			
		||||
		return bson.E{Key: "$not", Value: f}
 | 
			
		||||
	default:
 | 
			
		||||
		return bson.E{Key: k, Value: bson.M{"$regex": ToValueOperator(StringToOperator(m.String()), value)}}
 | 
			
		||||
		return defaultValue
 | 
			
		||||
	}
 | 
			
		||||
	return defaultValue
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m Operator) ToMongoOperator(k string, value interface{}) bson.M {
 | 
			
		||||
	defer func() {
 | 
			
		||||
		if r := recover(); r != nil {
 | 
			
		||||
			fmt.Println("Recovered. Error:\n", r)
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
	defaultValue := bson.M{k: bson.M{"$regex": ToValueOperator(StringToOperator(m.String()), value)}}
 | 
			
		||||
	switch m {
 | 
			
		||||
	case LIKE:
 | 
			
		||||
		return bson.M{k: bson.M{"$regex": ToValueOperator(StringToOperator(m.String()), value)}}
 | 
			
		||||
@@ -76,9 +115,34 @@ func (m Operator) ToMongoOperator(k string, value interface{}) bson.M {
 | 
			
		||||
		return bson.M{k: bson.M{"$lt": ToValueOperator(StringToOperator(m.String()), value)}}
 | 
			
		||||
	case EQUAL:
 | 
			
		||||
		return bson.M{k: value}
 | 
			
		||||
	case NOT:
 | 
			
		||||
		v := value.(Filters)
 | 
			
		||||
		orList := bson.A{}
 | 
			
		||||
		andList := bson.A{}
 | 
			
		||||
		f := bson.D{}
 | 
			
		||||
		for k, filter := range v.Or {
 | 
			
		||||
			for _, ff := range filter {
 | 
			
		||||
				orList = append(orList, StringToOperator(ff.Operator).ToMongoOperator(k, ff.Value))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		for k, filter := range v.And {
 | 
			
		||||
			for _, ff := range filter {
 | 
			
		||||
				andList = append(andList, StringToOperator(ff.Operator).ToMongoOperator(k, ff.Value))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if len(orList) > 0 && len(andList) == 0 {
 | 
			
		||||
			f = bson.D{{"$or", orList}}
 | 
			
		||||
		} else {
 | 
			
		||||
			if len(orList) > 0 {
 | 
			
		||||
				andList = append(andList, bson.M{"$or": orList})
 | 
			
		||||
			}
 | 
			
		||||
			f = bson.D{{"$and", andList}}
 | 
			
		||||
		}
 | 
			
		||||
		return bson.M{"$not": f}
 | 
			
		||||
	default:
 | 
			
		||||
		return bson.M{k: bson.M{"$regex": ToValueOperator(StringToOperator(m.String()), value)}}
 | 
			
		||||
		return defaultValue
 | 
			
		||||
	}
 | 
			
		||||
	return defaultValue
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func StringToOperator(s string) Operator {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user