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

View File

@ -1,14 +1,24 @@
#python imports #python imports
from fastapi import APIRouter, HTTPException from fastapi import APIRouter, HTTPException
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
import httpx
#dependency imports #dependency imports
from use_cases.view_cart import ViewCart from use_cases.view_cart import ViewCart
from interface_adapters.dtos.view_cart_response import ViewCartResponseDTO, CartItemDTO from interface_adapters.dtos.view_cart_response import ViewCartResponseDTO, CartItemDTO
from interface_adapters.dtos.view_cart_request import ViewCartRequestDTO from interface_adapters.dtos.view_cart_request import ViewCartRequestDTO
from interface_adapters.repositories.cart_repository import CartRepository from interface_adapters.repositories.cart_repository import CartRepository
#from interface_adapters.mocks.cart_db import CartDatabase #from interface_adapters.mocks.cart_db import CartDatabase
from framework_driver.db.db_cart import CartDatabase from framework_driver.db.db_cart import CartDatabase
# Set up templates
templates = Jinja2Templates(directory="framework_driver/ui/templates")
# Initialize components # Initialize components
cart_database = CartDatabase() # Concrete database implementation cart_database = CartDatabase() # Concrete database implementation
cart_repository = CartRepository(cart_database) # Repository depends on gateway 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) 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} {"id": 2, "name": "Product 2", "price": 20.0}
] ]
return templates.TemplateResponse("products.html", {"request": request, "products": products}) 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)