Files
BOTKlining/doners/bot-market/app/handlers.py
2025-06-08 20:55:08 +09:00

72 lines
3.2 KiB
Python

from aiogram import Router, F
from aiogram.types import Message, CallbackQuery
from aiogram.filters import CommandStart, Command
import app.keyboards as kb
from app.database.requests import (get_item_by_id, set_user,
set_basket, get_basket, get_item_by_id, delete_basket)
router = Router()
@router.message(CommandStart())
@router.callback_query(F.data == 'to_main')
async def cmd_start(message: Message | CallbackQuery):
if isinstance(message, Message):
await set_user(message.from_user.id)
await message.answer("Добро пожаловать в интернет магазин!",
reply_markup=kb.main)
else:
await message.answer('Вы вернулись на главную')
await message.message.answer("Добро пожаловать в интернет магазин!",
reply_markup=kb.main)
@router.callback_query(F.data == 'catalog')
async def catalog(callback: CallbackQuery):
await callback.answer('')
await callback.message.edit_text(text='Выберите категорию.',
reply_markup=await kb.categories())
@router.callback_query(F.data.startswith('category_'))
async def category(callback: CallbackQuery):
await callback.answer('')
await callback.message.edit_text('Выберите товар',
reply_markup=await kb.items(callback.data.split('_')[1]))
@router.callback_query(F.data.startswith('item_'))
async def category(callback: CallbackQuery):
item = await get_item_by_id(callback.data.split('_')[1])
await callback.answer('')
await callback.message.answer_photo(photo=item.photo,
caption=f'{item.name}\n\n{item.description}\n\nЦена: {item.price} рублей',
reply_markup=await kb.basket(item.id))
@router.callback_query(F.data.startswith('order_'))
async def basket(callback: CallbackQuery):
await set_basket(callback.from_user.id, callback.data.split('_')[1])
await callback.answer('Товар добавлен в корзину')
@router.callback_query(F.data == 'mybasket')
async def mybasket(callback: CallbackQuery):
await callback.answer('')
basket = await get_basket(callback.from_user.id)
counter = 0
for item_info in basket:
item = await get_item_by_id(item_info.item)
await callback.message.answer_photo(photo=item.photo,
caption=f'{item.name}\n\n{item.description}\n\nЦена: {item.price} рублей',
reply_markup=await kb.delete_from_basket(item.id))
counter += 1
await callback.message.answer('Ваша корзина пуста') if counter == 0 else await callback.answer('')
@router.callback_query(F.data.startswith('delete_'))
async def delete_from_basket(callback: CallbackQuery):
await delete_basket(callback.from_user.id, callback.data.split('_')[1])
await callback.message.delete()
await callback.answer('Вы удалили товар из корзины')