Protected delete

v2
Nikita Tokarchuk 6 years ago
parent db3aedd521
commit ac9b808a3e
  1. 17
      mongox/common/deleteone.go

@ -2,10 +2,13 @@ package common
import ( 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/errors" "github.com/mainnika/mongox-go-driver/mongox/errors"
"github.com/mainnika/mongox-go-driver/mongox/query" "github.com/mainnika/mongox-go-driver/mongox/query"
"github.com/mongodb/mongo-go-driver/bson/primitive"
"github.com/mongodb/mongo-go-driver/mongo" "github.com/mongodb/mongo-go-driver/mongo"
"github.com/mongodb/mongo-go-driver/mongo/options" "github.com/mongodb/mongo-go-driver/mongo/options"
"time"
) )
// DeleteOne removes a document from a database and then returns it into target // DeleteOne removes a document from a database and then returns it into target
@ -14,9 +17,23 @@ func DeleteOne(db *mongox.Database, target interface{}, filters ...interface{})
collection := db.GetCollectionOf(target) collection := db.GetCollectionOf(target)
opts := &options.FindOneAndDeleteOptions{} opts := &options.FindOneAndDeleteOptions{}
composed := query.Compose(filters...) composed := query.Compose(filters...)
protected := base.GetProtection(target)
opts.Sort = composed.Sorter() opts.Sort = composed.Sorter()
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})
}
protected.X = primitive.NewObjectID()
protected.V = time.Now().Unix()
}
result := collection.FindOneAndDelete(db.Context(), composed.M(), opts) result := collection.FindOneAndDelete(db.Context(), composed.M(), opts)
if result.Err() != nil { if result.Err() != nil {
return errors.InternalErrorf("can't create find one and delete result: %s", result.Err()) return errors.InternalErrorf("can't create find one and delete result: %s", result.Err())

Loading…
Cancel
Save