41 lines
858 B
Go
41 lines
858 B
Go
![]() |
package dynamodb
|
||
|
|
||
|
import (
|
||
|
"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"
|
||
|
"github.com/guregu/dynamo"
|
||
|
)
|
||
|
|
||
|
// As updpate all item not supported so set manually via Set and SetNullable for empty field
|
||
|
func UpdateByHashKey(table dynamo.Table, hashKey string, hashValue string, item interface{}) error {
|
||
|
existingValue, err := dynamo.MarshalItem(item)
|
||
|
var i interface{}
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
nullableValue, err := dynamodbattribute.MarshalMap(item)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
u := table.Update(hashKey, hashValue)
|
||
|
for k, v := range existingValue {
|
||
|
if k == hashKey {
|
||
|
continue
|
||
|
}
|
||
|
u = u.Set(k, v)
|
||
|
}
|
||
|
for k, v := range nullableValue {
|
||
|
if k == hashKey {
|
||
|
continue
|
||
|
}
|
||
|
dynamodbattribute.Unmarshal(v, &i)
|
||
|
if i == nil {
|
||
|
u = u.SetNullable(k, v)
|
||
|
}
|
||
|
}
|
||
|
err = u.Run()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|