from copy import deepcopy


def reduce_order(events):
    state = {"amount": 0, "approved": False}
    for event in events:
        if event["type"] == "amount_set":
            state["amount"] = event["amount"]
            state["approved"] = False
        elif event["type"] == "approved":
            state["approved"] = True
        else:
            raise ValueError("未知事件类型")
    return state


def append(events, expected_version, event):
    # 单进程演示；生产环境需在存储端原子地校验与追加。
    if len(events) != expected_version:
        raise ValueError("版本冲突")
    events.append(deepcopy(event))


events = []
append(events, 0, {"type": "amount_set", "amount": 12000})
append(events, 1, {"type": "approved"})
assert reduce_order(events) == {"amount": 12000, "approved": True}
assert reduce_order(events[:1])["approved"] is False
try:
    append(events, 1, {"type": "amount_set", "amount": 9000})
except ValueError:
    pass
else:
    raise AssertionError("应拒绝过期版本")
print("当前状态与历史状态均可重建，过期写入被拒绝")
