Script

Task1-Get-Order-Detail

# -*- coding: utf-8 -*-

import typing as T
import json
import dataclasses


@dataclasses.dataclass
class InputData:
    order_id: str


database = {
    "orders": {
        "order-1": {
            "order_id": "order-1",
            "items": [1, 2],
            "ship_address": "123 st, Newyork, NY 10001",
        },
        "order-2": {"..."},
        "order-3": {"..."},
    }
}


@dataclasses.dataclass
class OutputData:
    order_id: str
    items: T.List
    ship_address: str


def lambda_handler(event, context):
    print("received event:")
    print(json.dumps(event, indent=4))
    input = InputData(**event)
    output = OutputData(**database["orders"][input.order_id])
    return dataclasses.asdict(output)

Task2a-2-Get-Item-Cost

# -*- coding: utf-8 -*-

import typing as T
import json
import dataclasses


@dataclasses.dataclass
class InputData:
    items: T.List


@dataclasses.dataclass
class OutputData:
    total_price: float


database = {
    "items": {
        1: {"price": 14.99},
        2: {"price": 3.99},
        3: {"price": 7.99},
    }
}


def lambda_handler(event, context):
    print("received event:")
    print(json.dumps(event, indent=4))
    input = InputData(**event)
    total_price = sum([database["items"][item]["price"] for item in input.items])
    output = OutputData(total_price=total_price)
    return dataclasses.asdict(output)

Task2b-2-Get-Ship-Cost

# -*- coding: utf-8 -*-

import typing as T
import json
import dataclasses


@dataclasses.dataclass
class InputData:
    ship_address: str


@dataclasses.dataclass
class OutputData:
    ship_cost: float


def lambda_handler(event, context):
    print("received event:")
    print(json.dumps(event, indent=4))
    input = InputData(**event)
    output = OutputData(ship_cost=9.99)
    return dataclasses.asdict(output)

Task4-Process-Payment

# -*- coding: utf-8 -*-

import json
import dataclasses


@dataclasses.dataclass
class Input:
    balance: float


def charge_credit_card(card_number: str, balance: float):
    pass


@dataclasses.dataclass
class Output:
    status: str


def lambda_handler(event, context):
    print("received event:")
    print(json.dumps(event, indent=4))
    input = Input(**event)
    try:
        charge_credit_card("1234-5678-1234-5678", input.balance)
        output = Output(status="success")
    except:
        output = Output(status="failed")
    return dataclasses.asdict(output)

Task2a-1-Extract-Items

# -*- coding: utf-8 -*-

import typing as T
import json
import dataclasses


@dataclasses.dataclass
class InputData:
    order_id: str
    items: T.List
    ship_address: str


@dataclasses.dataclass
class OutputData:
    items: T.List


def lambda_handler(event, context):
    print("received event:")
    print(json.dumps(event, indent=4))
    input = InputData(**event)
    output = OutputData(items=input.items)
    return dataclasses.asdict(output)

Task2b-1-Extract-Ship-Address

# -*- coding: utf-8 -*-

import typing as T
import json
import dataclasses


@dataclasses.dataclass
class InputData:
    order_id: str
    items: T.List
    ship_address: str


@dataclasses.dataclass
class OutputData:
    ship_address: str


def lambda_handler(event, context):
    print("received event:")
    print(json.dumps(event, indent=4))
    input = InputData(**event)
    output = OutputData(ship_address=input.ship_address)
    return dataclasses.asdict(output)

Task3-Find-Balance

# -*- coding: utf-8 -*-

import typing as T
import json
import dataclasses


@dataclasses.dataclass
class Output:
    balance: float


def lambda_handler(
    event: T.Tuple[
        T.Dict[str, float],
        T.Dict[str, float],
    ],
    context,
):
    print("received event:")
    print(json.dumps(event, indent=4))
    total_price = event[0]["total_price"]
    ship_cost = event[1]["ship_cost"]
    output = Output(balance=total_price + ship_cost)
    return dataclasses.asdict(output)