replace ReplaceOne with UpdateOne

this keeps timestamps intact...
This commit is contained in:
☙◦ The Tablet ❀ GamerGirlandCo ◦❧ 2025-03-27 19:58:43 -04:00
parent 33af8ce8e7
commit ad7c7f38af
Signed by: tablet
GPG Key ID: 924A5F6AF051E87C

View File

@ -2,6 +2,7 @@ package orm
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"github.com/fatih/structtag" "github.com/fatih/structtag"
"go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/bson"
@ -122,7 +123,7 @@ func doSave(c *mongo.Collection, isNew bool, opts *SaveOptions, arg interface{})
} }
var asHasId = vp.Interface().(HasID) var asHasId = vp.Interface().(HasID)
var asModel = vp.Interface().(IDocument) var asModel = vp.Interface().(IDocument)
if isNew && opts.SetTimestamps { if (isNew && reflect.ValueOf(asHasId.Id()).IsZero()) && opts.SetTimestamps {
d.setCreated(now) d.setCreated(now)
} }
if opts.SetTimestamps { if opts.SetTimestamps {
@ -135,6 +136,7 @@ func doSave(c *mongo.Collection, isNew bool, opts *SaveOptions, arg interface{})
return err return err
} }
} }
if isNew { if isNew {
nid := getLastInColl(c.Name(), asHasId.Id()) nid := getLastInColl(c.Name(), asHasId.Id())
pnid := incrementInterface(nid) pnid := incrementInterface(nid)
@ -148,9 +150,23 @@ func doSave(c *mongo.Collection, isNew bool, opts *SaveOptions, arg interface{})
_, err = c.InsertOne(context.TODO(), d.serializeToStore()) _, err = c.InsertOne(context.TODO(), d.serializeToStore())
if err == nil { if err == nil {
d.setExists(true) d.setExists(true)
} else {
_, err = c.UpdateOne(context.TODO(), bson.D{{Key: "_id", Value: d.(HasID).Id()}}, bson.M{
"$set": d.serializeToStore(),
})
//_, err = c.ReplaceOne(context.TO_DO(), bson.D{{Key: "_id", Value: d.(HasID).Id()}}, d.serializeToStore())
} }
} else { } else {
_, err = c.ReplaceOne(context.TODO(), bson.D{{Key: "_id", Value: d.(HasID).Id()}}, d.serializeToStore()) //_, err = c.ReplaceOne(context.TO_DO(), bson.D{{Key: "_id", Value: d.(HasID).Id()}}, d.serializeToStore())
_, err = c.UpdateOne(context.TODO(), bson.D{{Key: "_id", Value: d.(HasID).Id()}}, bson.M{
"$set": d.serializeToStore(),
})
if errors.Is(err, mongo.ErrNoDocuments) {
_, err = c.InsertOne(context.TODO(), d.serializeToStore())
if err == nil {
d.setExists(true)
}
}
} }
return err return err
} }