|
|
@ -4,6 +4,7 @@ import ( |
|
|
|
"github.com/mainnika/mongox-go-driver/mongox" |
|
|
|
"github.com/mainnika/mongox-go-driver/mongox" |
|
|
|
"github.com/mainnika/mongox-go-driver/mongox/base" |
|
|
|
"github.com/mainnika/mongox-go-driver/mongox/base" |
|
|
|
"github.com/mainnika/mongox-go-driver/mongox/errors" |
|
|
|
"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" |
|
|
|
"github.com/mongodb/mongo-go-driver/bson/primitive" |
|
|
|
"github.com/mongodb/mongo-go-driver/bson/primitive" |
|
|
|
"github.com/mongodb/mongo-go-driver/mongo/options" |
|
|
|
"github.com/mongodb/mongo-go-driver/mongo/options" |
|
|
@ -17,25 +18,18 @@ func SaveOne(db *mongox.Database, source interface{}) error { |
|
|
|
opts := options.FindOneAndReplace() |
|
|
|
opts := options.FindOneAndReplace() |
|
|
|
id := base.GetID(source) |
|
|
|
id := base.GetID(source) |
|
|
|
protected := base.GetProtection(source) |
|
|
|
protected := base.GetProtection(source) |
|
|
|
filter := bson.M{"_id": id} |
|
|
|
composed := query.Compose(bson.M{"_id": id}) |
|
|
|
|
|
|
|
|
|
|
|
opts.SetUpsert(true) |
|
|
|
opts.SetUpsert(true) |
|
|
|
opts.SetReturnDocument(options.After) |
|
|
|
opts.SetReturnDocument(options.After) |
|
|
|
|
|
|
|
|
|
|
|
if protected != nil { |
|
|
|
if protected != nil { |
|
|
|
if protected.X.IsZero() { |
|
|
|
query.Push(composed, protected) |
|
|
|
filter["_x"] = primitive.M{"$exists": false} |
|
|
|
|
|
|
|
filter["_v"] = primitive.M{"$exists": false} |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
filter["_x"] = protected.X |
|
|
|
|
|
|
|
filter["_v"] = protected.V |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected.X = primitive.NewObjectID() |
|
|
|
protected.X = primitive.NewObjectID() |
|
|
|
protected.V = time.Now().Unix() |
|
|
|
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 { |
|
|
|
if result.Err() != nil { |
|
|
|
return errors.NotFoundErrorf("%s", result.Err()) |
|
|
|
return errors.NotFoundErrorf("%s", result.Err()) |
|
|
|
} |
|
|
|
} |
|
|
|