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 misc.kb import main_menu_kb, render_category from repositories.categories import CategoriesRepository from services.categories import CategoryService from services.orders import OrderService router = Router() @router.message(Command("start")) async def main_menu(msg: Message, state: FSMContext): await state.clear() await msg.answer( "hii!", reply_markup=await main_menu_kb(msg.from_user.id) ) # TODO: Write a welcome message @router.callback_query(F.data.startswith("menu:")) async def main_menu_cb(cb: CallbackQuery, state: FSMContext): await state.clear() await cb.message.edit_text( "hii!", reply_markup=await main_menu_kb(cb.from_user.id) ) # TODO: Write a welcome message @router.message(Command("orders")) async def get_orders( msg: Message, state: FSMContext, order_service: OrderService, session: AsyncSession, ): await state.clear() count = await order_service.get_order_count(session, msg.from_user.id) await msg.answer(f"you have {count} orders.") @router.callback_query(F.data.startswith("cat:")) async def subcatalogue( cb: CallbackQuery, state: FSMContext, category_service: CategoryService, session: AsyncSession, categories_repo: CategoriesRepository, ): await state.clear() cat_id = cb.data.split(":")[1] if cat_id == "root": children = await category_service.get_children(session) kb = await render_category(children, show_menu=True) else: cat_id = int(cat_id) children = await category_service.get_children(session, cat_id) category = await categories_repo.get_category_by_id(session, cat_id) parent_id = category.parent_id or "root" kb = await render_category(children, parent_id) await cb.message.edit_text( "category selection", reply_markup=kb, )