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