invix_test_task/api/app/routers/cart.py

26 lines
1.1 KiB
Python

from fastapi import APIRouter, Request, Response
from app.deps import SessionDep, ensure_web_session, web_owner
from app.schemas import CartAdd, CartOut
from app.services import add_item, load_cart, remove_item
router = APIRouter()
@router.get("/cart", response_model=CartOut)
async def get_cart(request: Request, response: Response, db: SessionDep) -> CartOut:
session_id = await ensure_web_session(request, response, db)
return await load_cart(db, web_owner(session_id))
@router.post("/cart/items", response_model=CartOut)
async def post_item(body: CartAdd, request: Request, response: Response, db: SessionDep) -> CartOut:
session_id = await ensure_web_session(request, response, db)
return await add_item(db, owner_key=web_owner(session_id), product_id=body.product_id, qty=body.qty)
@router.delete("/cart/items/{product_id}", response_model=CartOut)
async def delete_item(product_id: int, request: Request, response: Response, db: SessionDep) -> CartOut:
session_id = await ensure_web_session(request, response, db)
return await remove_item(db, owner_key=web_owner(session_id), product_id=product_id)