from dataclasses import dataclass
from copy import deepcopy


@dataclass
class Order:
    amount: int
    status: str = "pending"

    def approve(self, ceiling):
        if self.status != "pending" or self.amount > ceiling:
            raise ValueError("订单状态或审批金额不满足条件")
        self.status = "approved"


class Repository:
    def __init__(self):
        self.rows = {"O1": Order(8000)}

    def get(self, key):
        return deepcopy(self.rows[key])

    def save(self, key, order):
        self.rows[key] = deepcopy(order)


def approve_order(repo, key, ceiling):
    order = repo.get(key)
    order.approve(ceiling)
    repo.save(key, order)


repo = Repository()
try:
    approve_order(repo, "O1", 7000)
except ValueError:
    pass
assert repo.get("O1").status == "pending"
approve_order(repo, "O1", 9000)
assert repo.get("O1").status == "approved"
print("规则由业务对象执行，拒绝后没有写入状态")
