Добавил:
@requali Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0392_ИвановЧастухин.docx
Скачиваний:
18
Добавлен:
08.09.2024
Размер:
3 Мб
Скачать
☆

Некоторые запросы к бд:

def read_cart_by_user_id(user_id: int) -> list[dict]:

    stmt = select(Order).where(Order.user_id == user_id).where(Order.status == OrderStatus.cart)

    with Session() as db:

        cart = db.scalars(stmt).first()

    return OrderSchema.from_orm(cart).__dict__

def read_active_orders(user_id: int) -> list[dict]:

    stmt = (

        select(Order)

        .where(Order.user_id == user_id)

        .where(

            Order.status == Order.status.created

            or Order.status == Order.status.confirmed

            or Order.status == Order.status.shipped

        )

    )

    with Session() as db:

        orders = db.scalars(stmt).all()

    return [OrderSchema.from_orm(order).__dict__ for order in orders]

def read_order_by_id(id: int) -> dict | None:

    stmt = select(Order).where(Order.id == id)

    with Session() as db:

        order = db.scalars(stmt).first()

    if not order:

        return None

    return OrderSchema.from_orm(order).__dict__

Описание некоторых хэндлеров бота:

@router.callback_query(F.data == "order_view")

async def order_view(callback: types.CallbackQuery, state: FSMContext):

    await callback.message.edit_reply_markup(reply_markup=None)

    await callback.message.answer("Выберите действие для заказа", reply_markup=seller_kb.order_action())

@router.callback_query(F.data == "approve")

async def approve(callback: types.CallbackQuery, state: FSMContext):

    orders = order.read_created_orders()

    if orders:

        await callback.message.answer("Выберите заказ для подтверждения", reply_markup=seller_kb.orders(orders,'apv:'))

    else:

        await callback.message.answer("Нет созданных заказов", reply_markup=seller_kb.sellermenu())

@router.callback_query(F.data.startswith("apv:"))

async def approve_by_id(callback: types.CallbackQuery, state: FSMContext):

    id = callback.data[4:]

    if order.update_order_status(int(id), "confirmed"): # order.update_order_status

        await callback.message.answer("Заказ подтвержден", reply_markup=seller_kb.sellermenu())

    else:

        await callback.message.answer("Ошибка подтверждения, повторите попытку", reply_markup=seller_kb.sellermenu())

    await state.set_state(sellerstate.menu)

@router.callback_query(F.data == "delete_product")

async def delete_product(callback: types.CallbackQuery, state: FSMContext):

    await callback.message.answer("Введите id товара для удаления", reply_markup=None)

    await state.set_state(sellerstate.enter_id)

@router.message(sellerstate.enter_id)

async def enter_id(message: types.Message, state: FSMContext):

    product_to_delete = product.read_product_by_id(int(message.text))

    if product_to_delete == None:

        await message.answer("Такого товара не существует, повторите попытку")

    else:

        await message.answer(f"Подтвердите удаление товара:\nID: {product_to_delete['id']}\nНазвание: {product_to_delete['name']}\nЦена: {product_to_delete['price']}", reply_markup=seller_kb.yes_or_no(product_to_delete['id']))

        await state.set_state(sellerstate.menu)

@router.callback_query(F.data.startswith("delid:"))

async def delete_product(callback: types.CallbackQuery, state: FSMContext):

    await callback.message.edit_reply_markup(reply_markup=None)

    id = callback.data[6:]

    if product.delete_product(int(id)):

        await callback.message.answer("Товар успешно удален", reply_markup=seller_kb.sellermenu())

        await state.set_state(sellerstate.menu)

    else:

        await callback.message.answer("Ошибка удаления, повторите попытку", reply_markup=seller_kb.sellermenu())

        await state.set_state(sellerstate.menu)

Общая логика работы UI представлена ниже

Рис. 5. Блок-схема идентификации

Рис. 6. Блок-схема работы покупателей

Рис. 5. Блок-схема работы продавцов

Некоторые примеры обработки запросов:

Соседние файлы в предмете Технологии программирования