Added UpdateFunc for safer updates.
This commit is contained in:
parent
13e53f0c88
commit
c2828592ac
@ -237,6 +237,27 @@ func (c *Collection[T]) update(tx *Snapshot, userItem *T) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Collection[T]) UpdateFunc(tx *Snapshot, id uint64, update func(item *T) error) error {
|
||||
if tx == nil {
|
||||
return c.db.Update(func(tx *Snapshot) error {
|
||||
return c.updateFunc(tx, id, update)
|
||||
})
|
||||
}
|
||||
return c.updateFunc(tx, id, update)
|
||||
}
|
||||
|
||||
func (c *Collection[T]) updateFunc(tx *Snapshot, id uint64, update func(item *T) error) error {
|
||||
item := c.Get(tx, id)
|
||||
if item == nil {
|
||||
return errs.NotFound
|
||||
}
|
||||
if err := update(item); err != nil {
|
||||
return err
|
||||
}
|
||||
c.setID(item, id) // Don't allow the ID to change.
|
||||
return c.update(tx, item)
|
||||
}
|
||||
|
||||
func (c *Collection[T]) Upsert(tx *Snapshot, item *T) error {
|
||||
if tx == nil {
|
||||
return c.db.Update(func(tx *Snapshot) error {
|
||||
|
Loading…
Reference in New Issue
Block a user