Move protection query to explicit function

This commit is contained in:
Nikita Tokarchuk
2019-02-08 00:03:39 +01:00
parent c9f3a59969
commit 58a342057d
3 changed files with 52 additions and 26 deletions
+1 -8
View File
@@ -26,14 +26,7 @@ func DeleteOne(db *mongox.Database, target interface{}, filters ...interface{})
}
if protected != nil {
if protected.X.IsZero() {
composed.And(primitive.M{"_x": primitive.M{"$exists": false}})
composed.And(primitive.M{"_v": primitive.M{"$exists": false}})
} else {
composed.And(primitive.M{"_x": protected.X})
composed.And(primitive.M{"_v": protected.V})
}
query.Push(composed, protected)
protected.X = primitive.NewObjectID()
protected.V = time.Now().Unix()
}
+4 -10
View File
@@ -4,6 +4,7 @@ import (
"github.com/mainnika/mongox-go-driver/mongox"
"github.com/mainnika/mongox-go-driver/mongox/base"
"github.com/mainnika/mongox-go-driver/mongox/errors"
"github.com/mainnika/mongox-go-driver/mongox/query"
"github.com/mongodb/mongo-go-driver/bson"
"github.com/mongodb/mongo-go-driver/bson/primitive"
"github.com/mongodb/mongo-go-driver/mongo/options"
@@ -17,25 +18,18 @@ func SaveOne(db *mongox.Database, source interface{}) error {
opts := options.FindOneAndReplace()
id := base.GetID(source)
protected := base.GetProtection(source)
filter := bson.M{"_id": id}
composed := query.Compose(bson.M{"_id": id})
opts.SetUpsert(true)
opts.SetReturnDocument(options.After)
if protected != nil {
if protected.X.IsZero() {
filter["_x"] = primitive.M{"$exists": false}
filter["_v"] = primitive.M{"$exists": false}
} else {
filter["_x"] = protected.X
filter["_v"] = protected.V
}
query.Push(composed, protected)
protected.X = primitive.NewObjectID()
protected.V = time.Now().Unix()
}
result := collection.FindOneAndReplace(db.Context(), filter, source, opts)
result := collection.FindOneAndReplace(db.Context(), composed.M(), source, opts)
if result.Err() != nil {
return errors.NotFoundErrorf("%s", result.Err())
}