Passed
Pull Request — master (#10)
by eval
01:42
created

dynamodb/client_op_item_update.go   A

Size/Duplication

Total Lines 117
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 17
eloc 73
dl 0
loc 117
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A dynamodb.NewUpdateItemResult 0 15 4
A dynamodb.*DynamoDB.UpdateItem 0 17 3
C dynamodb.UpdateItemRequest.ToInput 0 45 10
1
package dynamodb
2
3
import (
4
	"context"
5
6
	SDK "github.com/aws/aws-sdk-go-v2/service/dynamodb"
7
8
	"github.com/evalphobia/aws-sdk-go-v2-wrapper/errors"
9
	"github.com/evalphobia/aws-sdk-go-v2-wrapper/private/pointers"
10
)
11
12
// UpdateItem executes `UpdateItem` operation.
13
func (svc *DynamoDB) UpdateItem(ctx context.Context, r UpdateItemRequest) (*UpdateItemResult, error) {
14
	in, err := r.ToInput()
15
	if err != nil {
16
		return nil, err
17
	}
18
19
	out, err := svc.RawUpdateItem(ctx, in)
20
	if err == nil {
21
		return NewUpdateItemResult(out), nil
22
	}
23
24
	err = svc.errWrap(errors.ErrorData{
25
		Err:          err,
26
		AWSOperation: "UpdateItem",
27
	})
28
	svc.Errorf(err.Error())
0 ignored issues
show
introduced by
can't check non-constant format in call to Errorf
Loading history...
29
	return nil, err
30
}
31
32
// UpdateItemRequest has parameters for `UpdateItem` operation.
33
type UpdateItemRequest struct {
34
	TableName string
35
	Key       map[string]AttributeValue
36
37
	// optional
38
	ConditionExpression         string
39
	ExpressionAttributeNames    map[string]string
40
	ExpressionAttributeValues   map[string]AttributeValue
41
	ReturnConsumedCapacity      ReturnConsumedCapacity
42
	ReturnItemCollectionMetrics ReturnItemCollectionMetrics
43
	ReturnValues                ReturnValue
44
	UpdateExpression            string
45
46
	XConditions XConditions
47
}
48
49
func (r UpdateItemRequest) ToInput() (*SDK.UpdateItemInput, error) {
0 ignored issues
show
introduced by
exported method UpdateItemRequest.ToInput should have comment or be unexported
Loading history...
50
	in := &SDK.UpdateItemInput{}
51
52
	if r.TableName != "" {
53
		in.TableName = pointers.String(r.TableName)
54
	}
55
	if len(r.Key) != 0 {
56
		m := make(map[string]SDK.AttributeValue, len(r.Key))
57
		for key, val := range r.Key {
58
			m[key] = val.ToSDK()
59
		}
60
		in.Key = m
61
	}
62
63
	if r.ConditionExpression != "" {
64
		in.ConditionExpression = pointers.String(r.ConditionExpression)
65
	}
66
67
	if len(r.ExpressionAttributeValues) != 0 {
68
		m := make(map[string]SDK.AttributeValue, len(r.ExpressionAttributeValues))
69
		for key, val := range r.ExpressionAttributeValues {
70
			m[key] = val.ToSDK()
71
		}
72
		in.ExpressionAttributeValues = m
73
	}
74
75
	in.ReturnConsumedCapacity = SDK.ReturnConsumedCapacity(r.ReturnConsumedCapacity)
76
	in.ReturnItemCollectionMetrics = SDK.ReturnItemCollectionMetrics(r.ReturnItemCollectionMetrics)
77
	in.ReturnValues = SDK.ReturnValue(r.ReturnValues)
78
79
	if r.UpdateExpression != "" {
80
		in.UpdateExpression = pointers.String(r.UpdateExpression)
81
	}
82
83
	if r.XConditions.hasValue() {
84
		expr, err := r.XConditions.Build()
85
		if err != nil {
86
			return nil, err
87
		}
88
		in.ConditionExpression = expr.Condition()
89
		in.ExpressionAttributeNames = expr.Names()
90
		in.ExpressionAttributeValues = expr.Values()
91
		in.UpdateExpression = expr.Update()
92
	}
93
	return in, nil
94
}
95
96
// UpdateItemResult contains results from `UpdateItem` operation.
97
type UpdateItemResult struct {
98
	Attributes            map[string]AttributeValue
99
	ConsumedCapacity      ConsumedCapacity
100
	ItemCollectionMetrics ItemCollectionMetrics
101
}
102
103
func NewUpdateItemResult(output *SDK.UpdateItemResponse) *UpdateItemResult {
0 ignored issues
show
introduced by
exported function NewUpdateItemResult should have comment or be unexported
Loading history...
104
	r := &UpdateItemResult{}
105
	if output == nil {
106
		return r
107
	}
108
109
	r.Attributes = newAttributeValueMap(output.Attributes)
110
111
	if output.ConsumedCapacity != nil {
112
		r.ConsumedCapacity = newConsumedCapacity(*output.ConsumedCapacity)
113
	}
114
	if output.ItemCollectionMetrics != nil {
115
		r.ItemCollectionMetrics = newItemCollectionMetrics(*output.ItemCollectionMetrics)
116
	}
117
	return r
118
}
119