diff --git a/src/allmende_payment_system/api/shop.py b/src/allmende_payment_system/api/shop.py index de5b6a0..4c4eaec 100644 --- a/src/allmende_payment_system/api/shop.py +++ b/src/allmende_payment_system/api/shop.py @@ -1,6 +1,7 @@ from decimal import Decimal +from typing import Annotated -from fastapi import APIRouter, HTTPException, Request +from fastapi import APIRouter, Form, HTTPException, Request from sqlalchemy import select from starlette import status from starlette.responses import RedirectResponse @@ -29,17 +30,32 @@ async def get_cart(request: Request, session: SessionDep, user: UserDep): return templates.TemplateResponse( "order.html.jinja", - context={"request": request, "order": user.shopping_cart, "is_cart": True}, + context={ + "request": request, + "user": user, + "order": user.shopping_cart, + "is_cart": True, + }, ) -@shop_router.get("/shop/finalize_order") -async def finalize_order(request: Request, session: SessionDep, user: UserDep): +@shop_router.post("/shop/finalize_order") +async def finalize_order( + request: Request, + session: SessionDep, + user: UserDep, + account_id: Annotated[float, Form()], +): cart = user.shopping_cart - # TODO: Implement - cart.finalize(user.accounts[0]) + for account in user.accounts: + if account.id == account_id: + break + else: + raise HTTPException(status_code=400, detail="Invalid account ID.") + + cart.finalize(account) return RedirectResponse(url=f"/", status_code=status.HTTP_302_FOUND) diff --git a/src/allmende_payment_system/templates/order.html.jinja b/src/allmende_payment_system/templates/order.html.jinja index 1f2422c..e24564e 100644 --- a/src/allmende_payment_system/templates/order.html.jinja +++ b/src/allmende_payment_system/templates/order.html.jinja @@ -70,8 +70,20 @@ {% if is_cart %}