Files
saladeaula.digital/courses-events/app/events/daily_sync_course_metadata.py

37 lines
1.1 KiB
Python

import requests
from aws_lambda_powertools.utilities.data_classes import (
DynamoDBStreamEvent,
event_source,
)
from aws_lambda_powertools.utilities.typing import LambdaContext
from layercake.dateutils import now
from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair
from boto3clients import dynamodb_client
from config import API_URL, COURSE_TABLE
course_layer = DynamoDBPersistenceLayer(COURSE_TABLE, dynamodb_client)
@event_source(data_class=DynamoDBStreamEvent)
def lambda_handler(event: DynamoDBStreamEvent, context: LambdaContext) -> bool:
r = requests.get(f'{API_URL}/courses.json')
r.raise_for_status()
data = r.json()
now_ = now()
with course_layer.transact_writer() as transact:
for course in data:
transact.update(
key=KeyPair(course['id'], '0'),
update_expr='SET metadata__unit_price = :unit_price, \
updated_at = :updated_at',
expr_attr_values={
':unit_price': course['metadata']['unit_price'],
':updated_at': now_,
},
)
return True