from typing import Optional from aiogram import Router, F from aiogram.fsm.context import FSMContext from aiogram.types import CallbackQuery, Message from sqlalchemy.ext.asyncio import AsyncSession from misc.kb.client import render_products from misc.kb.common import return_menu from misc.states import SearchStorage from repositories.products import ProductRepository router = Router() @router.callback_query(F.data == "find") async def search_trigger(cb: CallbackQuery, state: FSMContext): await state.clear() await cb.message.edit_text("🔍 Введите запрос:", reply_markup=return_menu) await state.set_state(SearchStorage.query) await state.set_data({"msg": cb.message}) @router.message(SearchStorage.query) async def searching( msg: Message, state: FSMContext, session: AsyncSession, products_repo: ProductRepository, ): data = await state.get_data() await state.clear() orig_msg: Optional[Message] = data.get("msg") results = await products_repo.search( session, msg.text, ) if not orig_msg: await msg.answer( "here", reply_markup=render_products( results, product_cb_factory=lambda p: f"product:{p.id}", back_cb="menu:main", next_cb="", ), ) return await orig_msg.edit_text( "here", reply_markup=render_products( results, product_cb_factory=lambda p: f"product:{p.id}", back_cb="menu:main" ), )