from aws_lambda_powertools.event_handler.api_gateway import Router from layercake.dynamodb import ( DynamoDBPersistenceLayer, KeyPair, SortKey, TransactKey, ) from boto3clients import dynamodb_client from config import ORDER_TABLE from exceptions import OrderNotFoundError from .checkout import router as checkout from .payment_retries import router as payment_retries __all__ = ['checkout', 'payment_retries'] router = Router() dyn = DynamoDBPersistenceLayer(ORDER_TABLE, dynamodb_client) @router.get('/') def get_order(order_id: str): order = dyn.collection.get_items( TransactKey(order_id) + SortKey('0') + SortKey('ITEMS', rename_key='items', path_spec='items') + SortKey('CREATED_BY', rename_key='created_by') + SortKey('ADDRESS', rename_key='address') + SortKey('CREDIT_CARD', rename_key='credit_card') + SortKey('INVOICE', rename_key='invoice') + SortKey('NFSE', rename_key='nfse') + SortKey('FEE', rename_key='fee') + SortKey('TRANSACTION#STATS', rename_key='stats'), ) if not order: raise OrderNotFoundError('Order not found') attempts = dyn.collection.query(KeyPair(order_id, 'TRANSACTION#ATTEMPT#')) enrollments = dyn.collection.query(KeyPair(order_id, 'ENROLLMENT#')) return ( order | { 'payment_attempts': attempts['items'], 'enrollments': enrollments['items'], } # Post-migration (orders): remove the following lines | ({'created_at': order['create_date']} if 'create_date' in order else {}) | ({'paid_at': order['payment_date']} if 'payment_date' in order else {}) )