From adcfb420c4db12142be8e2c21262e06eeac03622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Rafael=20Siqueira?= Date: Wed, 21 Jan 2026 16:13:54 -0300 Subject: [PATCH] add fulfillment --- .../app/events/allocate_seats.py | 29 ----------- .../app/events/reenroll_if_failed.py | 48 ++++++++++++------- .../app/events/start_fulfillment.py | 32 +++++++++++++ 3 files changed, 63 insertions(+), 46 deletions(-) delete mode 100644 enrollments-events/app/events/allocate_seats.py create mode 100644 enrollments-events/app/events/start_fulfillment.py diff --git a/enrollments-events/app/events/allocate_seats.py b/enrollments-events/app/events/allocate_seats.py deleted file mode 100644 index 92d1f58..0000000 --- a/enrollments-events/app/events/allocate_seats.py +++ /dev/null @@ -1,29 +0,0 @@ -from uuid import uuid4 - -from aws_lambda_powertools import Logger -from aws_lambda_powertools.utilities.data_classes import ( - EventBridgeEvent, - event_source, -) -from aws_lambda_powertools.utilities.typing import LambdaContext -from layercake.dateutils import now - -logger = Logger(__name__) - - -@event_source(data_class=EventBridgeEvent) -@logger.inject_lambda_context -def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool: - new_image = event.detail['new_image'] - now_ = now() - org_id = '' - order_id = new_image['id'] - - docx = { - 'id': f'SEAT#ORG#{org_id}', - 'sk': f'ORDER#{order_id}#ENROLLMENT#{uuid4()}', - 'course': {}, - 'created_at': now_, - } - - return True diff --git a/enrollments-events/app/events/reenroll_if_failed.py b/enrollments-events/app/events/reenroll_if_failed.py index 56b4135..f2fdb46 100644 --- a/enrollments-events/app/events/reenroll_if_failed.py +++ b/enrollments-events/app/events/reenroll_if_failed.py @@ -10,7 +10,15 @@ from layercake.dynamodb import DynamoDBPersistenceLayer, SortKey, TransactKey from boto3clients import dynamodb_client from config import ENROLLMENT_TABLE -from enrollment import Course, Enrollment, Kind, LinkedEntity, User, enroll +from enrollment import ( + Course, + Enrollment, + Kind, + LinkedEntity, + SubscriptionFrozenError, + User, + enroll, +) logger = Logger(__name__) dyn = DynamoDBPersistenceLayer(ENROLLMENT_TABLE, dynamodb_client) @@ -48,19 +56,25 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool: user=user, ) - return enroll( - enrollment, - org=metadata.get('org', None), - subscription=subscription, - # Reuse the deduplication window if it exists - deduplication_window={'offset_days': offset_days} if offset_days else None, - linked_entities=frozenset( - { - LinkedEntity( - id=new_image['id'], - kind=Kind.ENROLLMENT, - ), - }, - ), - persistence_layer=dyn, - ) + try: + enroll( + enrollment, + org=metadata.get('org', None), + subscription=subscription, + # Reuse the deduplication window if it exists + deduplication_window={'offset_days': offset_days} if offset_days else None, + # The enrollment must know its source + linked_entities=frozenset( + { + LinkedEntity( + id=new_image['id'], + kind=Kind.ENROLLMENT, + ), + }, + ), + persistence_layer=dyn, + ) + except SubscriptionFrozenError: + pass + + return True diff --git a/enrollments-events/app/events/start_fulfillment.py b/enrollments-events/app/events/start_fulfillment.py new file mode 100644 index 0000000..dcf7d75 --- /dev/null +++ b/enrollments-events/app/events/start_fulfillment.py @@ -0,0 +1,32 @@ +# from uuid import uuid4 + +from aws_durable_execution_sdk_python import DurableContext, durable_execution +from aws_lambda_powertools import Logger +from aws_lambda_powertools.utilities.data_classes import ( + EventBridgeEvent, + event_source, +) + +# from layercake.dateutils import now + +logger = Logger(__name__) + + +@event_source(data_class=EventBridgeEvent) +@durable_execution +def lambda_handler(event: EventBridgeEvent, context: DurableContext) -> bool: + # new_image = event.detail['new_image'] + # now_ = now() + # org_id = '' + # order_id = new_image['id'] + + # docx = { + # 'id': f'SEAT#ORG#{org_id}', + # 'sk': f'ORDER#{order_id}#ENROLLMENT#{uuid4()}', + # 'course': {}, + # 'created_at': now_, + + logger.info(event) + # } + + return True