7
7
"github.com/aws/aws-sdk-go-v2/aws"
8
8
"github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue"
9
9
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
10
+ "github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
10
11
"github.com/rivernews/GoTools"
12
+ "github.com/rivernews/media-literacy/pkg/newssite"
11
13
12
14
"github.com/google/uuid"
13
15
)
@@ -24,27 +26,30 @@ func SharedDynamoDBClient() *dynamodb.Client {
24
26
return dynamoDBClient
25
27
}
26
28
27
- func DynamoDBPutItem ( ctx context. Context , item map [ string ] any ) * dynamodb. PutItemOutput {
29
+ func getTableName () string {
28
30
tableID := GoTools .GetEnvVarHelper ("DYNAMODB_TABLE_ID" )
29
31
if tableID == "" {
30
32
GoTools .Logger ("ERROR" , "DYNAMODB_TABLE_ID is required please set this env var" )
31
33
}
34
+ return tableID
35
+ }
32
36
33
- if _ , exist := item ["uuid" ]; ! exist {
34
- item ["uuid" ] = uuid .New ().String ()
37
+ func DynamoDBPutItem (ctx context.Context , item any ) * dynamodb.PutItemOutput {
38
+ dynamoDBItem , err := attributevalue .MarshalMap (item )
39
+ if err != nil {
40
+ GoTools .Logger ("ERROR" , err .Error ())
35
41
}
36
42
37
- if _ , exist := item [ "createdAt " ]; ! exist {
38
- // TODO
43
+ if _ , exist := dynamoDBItem [ "uuid " ]; ! exist {
44
+ dynamoDBItem [ "uuid" ] = uuid . New (). String ()
39
45
}
40
46
41
- dynamoDBItem , err := attributevalue .MarshalMap (item )
42
- if err != nil {
43
- GoTools .Logger ("ERROR" , err .Error ())
47
+ if _ , exist := dynamoDBItem ["createdAt" ]; ! exist {
48
+ dynamoDBItem ["createdAt" ] = newssite .Now ()
44
49
}
45
50
46
51
out , err := dynamoDBClient .PutItem (ctx , & dynamodb.PutItemInput {
47
- TableName : aws .String (tableID ),
52
+ TableName : aws .String (getTableName () ),
48
53
Item : dynamoDBItem ,
49
54
})
50
55
@@ -54,3 +59,29 @@ func DynamoDBPutItem(ctx context.Context, item map[string]any) *dynamodb.PutItem
54
59
55
60
return out
56
61
}
62
+
63
+ func DynamoDBQueryWaitingMetadata (ctx context.Context , docType newssite.DocType ) * []newssite.MediaTableItem {
64
+ out , err := dynamoDBClient .Query (ctx , & dynamodb.QueryInput {
65
+ TableName : aws .String (getTableName ()),
66
+ IndexName : aws .String (string (newssite .METADATA_INDEX )),
67
+ KeyConditionExpression : aws .String ("isDocTypeWaitingForMetadata = :isDocTypeWaitingForMetadata and createdAt < :createdAt" ),
68
+ ExpressionAttributeValues : map [string ]types.AttributeValue {
69
+ ":isDocTypeWaitingForMetadata" : & types.AttributeValueMemberS {Value : string (docType )},
70
+ ":createdAt" : & types.AttributeValueMemberS {Value : newssite .Now ()},
71
+ },
72
+ })
73
+ if err != nil {
74
+ GoTools .Logger ("ERROR" , err .Error ())
75
+ }
76
+
77
+ var results []newssite.MediaTableItem
78
+ attributevalue .UnmarshalListOfMaps (out .Items , & results )
79
+
80
+ return & results
81
+ }
82
+
83
+ func DynamoDBUpdateItem () {
84
+ // TODO: remove attribute
85
+
86
+ // TODO: add event to `events`
87
+ }
0 commit comments