add set as expired event to manual payment
This commit is contained in:
@@ -20,6 +20,7 @@ order_layer = DynamoDBPersistenceLayer(ORDER_TABLE, dynamodb_client)
|
|||||||
@event_source(data_class=EventBridgeEvent)
|
@event_source(data_class=EventBridgeEvent)
|
||||||
@logger.inject_lambda_context
|
@logger.inject_lambda_context
|
||||||
def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
|
def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
|
||||||
|
"""Set the order status to `EXPIRED` 24 hours after it becomes overdue."""
|
||||||
new_image = event.detail['new_image']
|
new_image = event.detail['new_image']
|
||||||
now_ = now()
|
now_ = now()
|
||||||
|
|
||||||
|
|||||||
33
order-events/app/events/stopgap/schedule_expired.py
Normal file
33
order-events/app/events/stopgap/schedule_expired.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
from datetime import timedelta
|
||||||
|
|
||||||
|
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 fromisoformat, ttl
|
||||||
|
from layercake.dynamodb import (
|
||||||
|
DynamoDBPersistenceLayer,
|
||||||
|
)
|
||||||
|
|
||||||
|
from boto3clients import dynamodb_client
|
||||||
|
from config import ORDER_TABLE
|
||||||
|
|
||||||
|
logger = Logger(__name__)
|
||||||
|
order_layer = DynamoDBPersistenceLayer(ORDER_TABLE, dynamodb_client)
|
||||||
|
|
||||||
|
|
||||||
|
@event_source(data_class=EventBridgeEvent)
|
||||||
|
@logger.inject_lambda_context
|
||||||
|
def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
|
||||||
|
new_image = event.detail['new_image']
|
||||||
|
due_date = fromisoformat(new_image['due_date'])
|
||||||
|
|
||||||
|
return order_layer.put_item(
|
||||||
|
item={
|
||||||
|
'id': new_image['id'],
|
||||||
|
'sk': 'schedules#set_as_expired',
|
||||||
|
'ttl': ttl(start_dt=due_date + timedelta(hours=24)),
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -158,6 +158,30 @@ Resources:
|
|||||||
new_image:
|
new_image:
|
||||||
sk: [schedules#set_as_expired]
|
sk: [schedules#set_as_expired]
|
||||||
|
|
||||||
|
EventScheduleExpiredFunction:
|
||||||
|
Type: AWS::Serverless::Function
|
||||||
|
Properties:
|
||||||
|
Handler: events.stopgap.schedule_expired.lambda_handler
|
||||||
|
LoggingConfig:
|
||||||
|
LogGroup: !Ref EventLog
|
||||||
|
Policies:
|
||||||
|
- DynamoDBWritePolicy:
|
||||||
|
TableName: !Ref OrderTable
|
||||||
|
Events:
|
||||||
|
Event:
|
||||||
|
Type: EventBridgeRule
|
||||||
|
Properties:
|
||||||
|
Pattern:
|
||||||
|
resources: [!Ref OrderTable]
|
||||||
|
detail-type: [INSERT]
|
||||||
|
detail:
|
||||||
|
new_image:
|
||||||
|
sk: ["0"]
|
||||||
|
status: [PENDING]
|
||||||
|
payment_method: [MANUAL]
|
||||||
|
due_date:
|
||||||
|
- exists: true
|
||||||
|
|
||||||
EventRemoveSlotsFunction:
|
EventRemoveSlotsFunction:
|
||||||
Type: AWS::Serverless::Function
|
Type: AWS::Serverless::Function
|
||||||
Properties:
|
Properties:
|
||||||
|
|||||||
31
order-events/tests/events/stopgap/test_schedule_expired.py
Normal file
31
order-events/tests/events/stopgap/test_schedule_expired.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
from decimal import Decimal
|
||||||
|
|
||||||
|
from aws_lambda_powertools.utilities.typing import LambdaContext
|
||||||
|
from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair
|
||||||
|
|
||||||
|
import events.stopgap.schedule_expired as app
|
||||||
|
|
||||||
|
|
||||||
|
def test_schedule_expired(
|
||||||
|
dynamodb_client,
|
||||||
|
dynamodb_persistence_layer: DynamoDBPersistenceLayer,
|
||||||
|
lambda_context: LambdaContext,
|
||||||
|
):
|
||||||
|
event = {
|
||||||
|
'detail': {
|
||||||
|
'new_image': {
|
||||||
|
'id': '123',
|
||||||
|
'sk': '0',
|
||||||
|
'due_date': '2025-07-04T08:34:45.780000-03:00',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert app.lambda_handler(event, lambda_context)
|
||||||
|
assert {
|
||||||
|
'sk': 'schedules#set_as_expired',
|
||||||
|
'ttl': Decimal('1751715285'),
|
||||||
|
'id': '123',
|
||||||
|
} == dynamodb_persistence_layer.get_item(
|
||||||
|
key=KeyPair('123', 'schedules#set_as_expired')
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user