/
dynamo.go
36 lines (29 loc) · 1.09 KB
/
dynamo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package repository
import (
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
"github.com/ricardojonathanromero/lambda-serverless-example/api-gateway-example/todo-update/internal/domain"
"github.com/ricardojonathanromero/lambda-serverless-example/api-gateway-example/todo-update/internal/port"
"github.com/ricardojonathanromero/lambda-utilities/utils"
)
type dynamoRepo struct {
client *dynamodb.Client
tableName string
}
var _ port.IRepository = (*dynamoRepo)(nil)
// Update replace current values from domain.TModel by passed/*
func (repo *dynamoRepo) Update(todo *domain.TModel) error {
var item *domain.DynamoModel
utils.CopyStruct(todo, &item)
ctx, cancel := utils.NewContextWithTimeout(timeoutIn)
defer cancel()
log.Tracef("updating todo-list: %v", utils.ToString(todo))
upd := &dynamodb.PutItemInput{Item: utils.ToDynamoDBMap(item), TableName: aws.String(repo.tableName)}
_, err := repo.client.PutItem(ctx, upd)
if err != nil {
log.Errorf("error updating item: %v", err)
return DocumentNotUpdated
}
log.Trace("document updated")
return nil
}