product management, unification of kb and so on.
This commit is contained in:
58
handlers/client/search.py
Normal file
58
handlers/client/search.py
Normal file
@@ -0,0 +1,58 @@
|
||||
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"
|
||||
),
|
||||
)
|
||||
Reference in New Issue
Block a user