72 lines
3.1 KiB
Python
72 lines
3.1 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('Вы удалили товар из корзины') |