separated clients handlers, cart->checkout ppline
This commit is contained in:
80
handlers/client/cart.py
Normal file
80
handlers/client/cart.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from aiogram import Router, F
|
||||
from aiogram.types import CallbackQuery, Message
|
||||
from aiogram.filters import Command
|
||||
from aiogram.fsm.context import FSMContext
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from config import PAGE_SIZE
|
||||
from misc.kb.client import (
|
||||
render_cart,
|
||||
)
|
||||
from services.orders import OrderService
|
||||
|
||||
router = Router()
|
||||
|
||||
|
||||
@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_pagination_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_pagination_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_pagination_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,
|
||||
),
|
||||
)
|
||||
Reference in New Issue
Block a user