connected ui cart with db

uebung_entities
Felix Jan Michael Mucha 2025-01-05 18:10:49 +01:00
parent 3f3c13abd0
commit 451fe6b2fa
3 changed files with 26 additions and 17 deletions

View File

@ -5,10 +5,11 @@
{% block content %}
<h2>Cart Items</h2>
<ul>
{% for item in cart_items %}
<li>{{ item.name }} - {{ item.quantity }}</li>
{% for item in cart_items['items'] %}
<li>Product ID: {{ item.product_id }} - Quantity: {{ item.quantity }} - Price: ${{ item.price }}</li>
{% endfor %}
</ul>
<p>Total Price: ${{ cart_items.total_price }}</p>
<a href="{{ url_for('ui') }}" class="btn btn-primary">Back to the prodcuts</a>

View File

@ -1,14 +1,24 @@
#python imports
from fastapi import APIRouter, HTTPException
from fastapi.responses import JSONResponse
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
import httpx
#dependency imports
from use_cases.view_cart import ViewCart
from interface_adapters.dtos.view_cart_response import ViewCartResponseDTO, CartItemDTO
from interface_adapters.dtos.view_cart_request import ViewCartRequestDTO
from interface_adapters.repositories.cart_repository import CartRepository
#from interface_adapters.mocks.cart_db import CartDatabase
from framework_driver.db.db_cart import CartDatabase
# Set up templates
templates = Jinja2Templates(directory="framework_driver/ui/templates")
# Initialize components
cart_database = CartDatabase() # Concrete database implementation
cart_repository = CartRepository(cart_database) # Repository depends on gateway
@ -29,4 +39,16 @@ async def view_cart(request_dto: ViewCartRequestDTO):
total_price=sum(item.price * item.quantity for item in cart.items)
)
return response_dto
return response_dto
@router.get("/ui/view_cart", response_class=HTMLResponse, name="ui_view_cart")
async def ui_view_cart(request: Request, user_id: int=1):
request_dto = {"user_id": user_id}
async with httpx.AsyncClient() as client:
response = await client.post("http://127.0.0.1:8000/view_cart", json=request_dto)
response.raise_for_status() # Raise an exception for HTTP errors
response_dto = response.json()
return templates.TemplateResponse("cart.html", {"request": request, "cart_items": response_dto})

View File

@ -51,17 +51,3 @@ async def ui(request: Request):
{"id": 2, "name": "Product 2", "price": 20.0}
]
return templates.TemplateResponse("products.html", {"request": request, "products": products})
@app.get("/ui/view_cart", response_class=HTMLResponse, name="ui_view_cart")
async def ui_view_cart(request: Request):
# Dummy cart data for demonstration
cart_items = [
{"product_id": 1, "name": "Product 1", "quantity": 2},
{"product_id": 2, "name": "Product 2", "quantity": 1}
]
return templates.TemplateResponse("cart.html", {"request": request, "cart_items": cart_items})
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8000)