mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-25 14:08:53 -06:00
re-implement update
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
package indexer
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/owncloud/ocis/accounts/pkg/indexer/errors"
|
||||
"github.com/owncloud/ocis/accounts/pkg/indexer/index/disk"
|
||||
"github.com/rs/zerolog"
|
||||
@@ -143,13 +144,25 @@ func (i Indexer) FindByPartial(t interface{}, field string, pattern string) ([]s
|
||||
|
||||
}
|
||||
|
||||
func (i Indexer) Update(t interface{}, field, oldVal, newVal string) error {
|
||||
typeName := getTypeFQN(t)
|
||||
if fields, ok := i.indices[typeName]; ok {
|
||||
for _, idx := range fields.IndicesByField[field] {
|
||||
pkVal := valueOf(t, fields.PKFieldName)
|
||||
if err := idx.Update(pkVal, oldVal, newVal); err != nil {
|
||||
return err
|
||||
func (i Indexer) Update(from, to interface{}) error {
|
||||
typeNameFrom := getTypeFQN(from)
|
||||
typeNameTo := getTypeFQN(to)
|
||||
if typeNameFrom != typeNameTo {
|
||||
return fmt.Errorf("update types do not match: from %v to %v", typeNameFrom, typeNameTo)
|
||||
}
|
||||
|
||||
if fields, ok := i.indices[typeNameFrom]; ok {
|
||||
for fName, indices := range fields.IndicesByField {
|
||||
oldV := valueOf(from, fName)
|
||||
newV := valueOf(to, fName)
|
||||
pkVal := valueOf(from, fields.PKFieldName)
|
||||
for _, index := range indices {
|
||||
if oldV == newV {
|
||||
continue
|
||||
}
|
||||
if err := index.Update(pkVal, oldV, newV); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package indexer
|
||||
|
||||
import (
|
||||
"github.com/owncloud/ocis/accounts/pkg/indexer/errors"
|
||||
. "github.com/owncloud/ocis/accounts/pkg/indexer/test"
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/stretchr/testify/assert"
|
||||
@@ -124,25 +123,50 @@ func TestIndexer_UpdateWithUniqueIndex(t *testing.T) {
|
||||
Log: zerolog.Logger{},
|
||||
})
|
||||
|
||||
indexer.AddUniqueIndex(&User{}, "UserName", "Id", "users")
|
||||
err := indexer.AddUniqueIndex(&User{}, "UserName", "Id", "users")
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = indexer.AddUniqueIndex(&User{}, "Email", "Id", "users")
|
||||
assert.NoError(t, err)
|
||||
|
||||
user1 := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
||||
user2 := &User{Id: "hijklmn-456", UserName: "frank", Email: "frank@example.com"}
|
||||
|
||||
err := indexer.Add(user1)
|
||||
err = indexer.Add(user1)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = indexer.Add(user2)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Update to non existing value
|
||||
err = indexer.Update(user2, "UserName", "frank", "jane")
|
||||
err = indexer.Update(user1, &User{
|
||||
Id: "abcdefg-123",
|
||||
UserName: "mikey-new",
|
||||
Email: "mikey@example.com",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
v, err1 := indexer.FindBy(&User{}, "UserName", "mikey-new")
|
||||
assert.NoError(t, err1)
|
||||
assert.Len(t, v, 1)
|
||||
v, err2 := indexer.FindBy(&User{}, "UserName", "mikey")
|
||||
assert.NoError(t, err2)
|
||||
assert.Len(t, v, 0)
|
||||
|
||||
// Update to non existing value
|
||||
err = indexer.Update(user2, "UserName", "mikey", "jane")
|
||||
assert.Error(t, err)
|
||||
assert.IsType(t, &errors.AlreadyExistsErr{}, err)
|
||||
err1 = indexer.Update(&User{
|
||||
Id: "abcdefg-123",
|
||||
UserName: "mikey-new",
|
||||
Email: "mikey@example.com",
|
||||
}, &User{
|
||||
Id: "abcdefg-123",
|
||||
UserName: "mikey-newest",
|
||||
Email: "mikey-new@example.com",
|
||||
})
|
||||
assert.NoError(t, err1)
|
||||
fbUserName, err2 := indexer.FindBy(&User{}, "UserName", "mikey-newest")
|
||||
assert.NoError(t, err2)
|
||||
assert.Len(t, fbUserName, 1)
|
||||
fbEmail, err3 := indexer.FindBy(&User{}, "Email", "mikey-new@example.com")
|
||||
assert.NoError(t, err3)
|
||||
assert.Len(t, fbEmail, 1)
|
||||
}
|
||||
|
||||
func TestIndexer_UpdateWithNonUniqueIndex(t *testing.T) {
|
||||
@@ -163,9 +187,6 @@ func TestIndexer_UpdateWithNonUniqueIndex(t *testing.T) {
|
||||
|
||||
err = indexer.Add(pet2)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = indexer.Update(pet2, "Name", "Ricky", "Jonny")
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user