| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -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()) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |