feat: initialize cart app with blueprints, templates, and CI
Some checks failed
Build and Deploy / build-and-deploy (push) Has been cancelled
Some checks failed
Build and Deploy / build-and-deploy (push) Has been cancelled
Extract cart, order, and orders blueprints with their service layer, templates, Dockerfile (APP_MODULE=app:app, IMAGE=cart), entrypoint, and Gitea CI workflow from the coop monolith. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
35
bp/cart/services/check_sumup_status.py
Normal file
35
bp/cart/services/check_sumup_status.py
Normal file
@@ -0,0 +1,35 @@
|
||||
from suma_browser.app.payments.sumup import get_checkout as sumup_get_checkout
|
||||
from sqlalchemy import update
|
||||
from models.calendars import CalendarEntry # NEW
|
||||
|
||||
|
||||
async def check_sumup_status(session, order):
|
||||
checkout_data = await sumup_get_checkout(order.sumup_checkout_id)
|
||||
order.sumup_status = checkout_data.get("status") or order.sumup_status
|
||||
sumup_status = (order.sumup_status or "").upper()
|
||||
|
||||
if sumup_status == "PAID":
|
||||
if order.status != "paid":
|
||||
order.status = "paid"
|
||||
filters = [
|
||||
CalendarEntry.deleted_at.is_(None),
|
||||
CalendarEntry.state == "ordered",
|
||||
CalendarEntry.order_id==order.id,
|
||||
]
|
||||
if order.user_id is not None:
|
||||
filters.append(CalendarEntry.user_id == order.user_id)
|
||||
elif order.session_id is not None:
|
||||
filters.append(CalendarEntry.session_id == order.session_id)
|
||||
|
||||
await session.execute(
|
||||
update(CalendarEntry)
|
||||
.where(*filters)
|
||||
.values(state="provisional")
|
||||
)
|
||||
# also clear cart for this user/session if it wasn't already
|
||||
elif sumup_status == "FAILED":
|
||||
order.status = "failed"
|
||||
else:
|
||||
order.status = sumup_status.lower() or order.status
|
||||
|
||||
await g.s.flush()
|
||||
Reference in New Issue
Block a user