18 lines
606 B
Python
18 lines
606 B
Python
|
|
class Ledger:
|
||
|
|
def __init__(self) -> None:
|
||
|
|
self._balances: dict[str, int] = {}
|
||
|
|
self._applied: set[str] = set()
|
||
|
|
|
||
|
|
def balance(self, account: str) -> int:
|
||
|
|
return self._balances.get(account, 0)
|
||
|
|
|
||
|
|
def apply(self, operation_id: str, account: str, delta: int) -> int:
|
||
|
|
if operation_id in self._applied:
|
||
|
|
return self.balance(account)
|
||
|
|
self._applied.add(operation_id)
|
||
|
|
updated = self.balance(account) + delta
|
||
|
|
if updated < 0:
|
||
|
|
raise ValueError("insufficient funds")
|
||
|
|
self._balances[account] = updated
|
||
|
|
return updated
|