Unification of pagination, admins control and more

This commit is contained in:
2026-03-02 19:02:20 +07:00
parent 035170e46f
commit eab67ccfc1
13 changed files with 271 additions and 118 deletions

View File

@@ -5,15 +5,15 @@ from aiogram.types import CallbackQuery, FSInputFile
from aiogram.fsm.context import FSMContext
from sqlalchemy.ext.asyncio import AsyncSession
from config import PAGE_SIZE, VERIFIED_ACCOUNTS
from config import VERIFIED_ACCOUNTS
from misc.kb import admins
from misc.kb.client import (
render_catalogue,
render_product_interactions,
render_products,
)
from misc.texts import get_product_description
from repositories.categories import CategoriesRepository
from repositories.products import ProductRepository
from services.catalogue import CatalogueService
from services.orders import OrderService
router = Router()
@@ -29,35 +29,22 @@ async def products_pagination(
state: FSMContext,
pagination_match: Match[str],
session: AsyncSession,
products_repo: ProductRepository,
categories_repo: CategoriesRepository,
catalogue_service: CatalogueService,
):
await state.clear()
pagination_data = pagination_match.groupdict()
category_id = int(pagination_data.get("category_id"))
category = await categories_repo.get_category_by_id(session, category_id)
page_id = int(pagination_data.get("page_id", 0))
products = await products_repo.get_product_by_category(
session, category_id, limit=PAGE_SIZE + 1, offset=page_id * PAGE_SIZE
view = await catalogue_service.build_category_view(
session, category_id, page=page_id
)
products_len = len(products)
is_admin = cb.from_user.id in VERIFIED_ACCOUNTS
await cb.message.edit_reply_markup(
reply_markup=render_products(
products[:PAGE_SIZE],
product_cb_factory=lambda p: f"product:{p.id}",
back_cb=f"cat:{category.parent_id}",
prev_cb=(f"products:{category_id}:{page_id - 1}" if page_id > 0 else None),
next_cb=(
f"products:{category_id}:{page_id + 1}"
if products_len > PAGE_SIZE
else None
),
columns=2,
),
)
kb = render_catalogue(view, is_admin=is_admin)
await cb.message.edit_reply_markup(reply_markup=kb)
@router.callback_query(F.data.startswith("product:"))