Cart rendering, bug fixes with cart adding/rming

This commit is contained in:
2026-02-08 19:15:48 +07:00
parent e8a61c05b3
commit 6409d66dfd
12 changed files with 252 additions and 38 deletions

View File

@@ -10,6 +10,7 @@ from config import PAGE_SIZE
from misc.kb import main_menu_kb, render_category
from misc.kb.client import (
get_back_to_catalogue,
render_cart,
render_product_interactions,
render_products,
)
@@ -265,6 +266,9 @@ async def add_to_cart(
else:
show_cart = False
quantity = 0
await order_service.clear_cart_item(
session, customer=cb.from_user.id, product_id=product_id
)
try:
await cb.message.edit_reply_markup(
@@ -275,6 +279,69 @@ async def add_to_cart(
cart_amount=quantity,
)
)
except Exception:
await cb.answer("🍃 Корзина уже пуста.")
return
except Exception as e:
await cb.answer("🍃")
raise e
@router.callback_query(F.data == "cart")
async def cart_init(
cb: CallbackQuery,
state: FSMContext,
session: AsyncSession,
order_service: OrderService,
):
await state.clear()
cart = await order_service.build_cart_dto(session, customer=cb.from_user.id)
await cb.message.edit_text(
f"total: {cart.total}",
reply_markup=render_cart(
cart.items[:PAGE_SIZE], show_next=len(cart.items) > PAGE_SIZE
),
)
@router.message(Command("cart"))
async def cart_cmd(
msg: Message,
state: FSMContext,
session: AsyncSession,
order_service: OrderService,
):
await state.clear()
cart = await order_service.build_cart_dto(session, customer=msg.from_user.id)
await msg.answer(
f"total: {cart.total}",
reply_markup=render_cart(
cart.items[:PAGE_SIZE], show_next=len(cart.items) > PAGE_SIZE
),
)
@router.callback_query(F.data.startswith("cart:"))
async def cart_pagination(
cb: CallbackQuery,
state: FSMContext,
session: AsyncSession,
order_service: OrderService,
):
await state.clear()
page = int(cb.data.split(":")[1])
cart = await order_service.build_cart_dto(
session, customer=cb.from_user.id, offset=page * PAGE_SIZE
)
await cb.message.edit_reply_markup(
reply_markup=render_cart(
cart.items[:PAGE_SIZE],
page=page,
show_next=len(cart.items) > PAGE_SIZE,
show_prev=page > 0,
),
)