26 lines · 816 BytesRaw
app/refunds.py | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/app/refunds.py b/app/refunds.py
index b9e9744..1d3877e 100644
--- a/app/refunds.py
+++ b/app/refunds.py
@@ -2,7 +2,18 @@ from app.db import db
from app.stripe import refund
+MAX_PER_HOUR = 3
+
+
+class RefundRejected(Exception):
+ pass
+
+
def create_refund(order_id, amount, agent):
+ if db.refunds.count(order_id=order_id, amount=amount, since_seconds=60):
+ raise RefundRejected("duplicate refund within a minute")
+ if db.refunds.count(order_id=order_id, since_seconds=3600) >= MAX_PER_HOUR:
+ raise RefundRejected("refund limit reached for this order")
order = db.orders.get(order_id)
refund(order.payment_intent, amount)
db.refunds.insert(order_id=order_id, amount=amount, agent=agent)