feat: admin product deletion
This commit is contained in:
@@ -13,8 +13,7 @@ from misc.kb.admins import back_to_product_kb
|
||||
from misc.kb.client import get_back_to_catalogue
|
||||
from misc.mapper import parse_cat_id
|
||||
from misc.states import AdminControlStorage
|
||||
from misc.texts import get_product_description
|
||||
from misc.texts import product_editing_mapping
|
||||
from misc.texts import get_product_description, product_editing_mapping
|
||||
from repositories.categories import CategoriesRepository
|
||||
from repositories.products import ProductRepository
|
||||
|
||||
@@ -210,6 +209,42 @@ async def delete_product_photo(
|
||||
await cb.message.edit_reply_markup(reply_markup=reply_markup)
|
||||
|
||||
|
||||
@router.callback_query(IsVerified(), F.data.regexp(r"^edit_product:\d+:delete$"))
|
||||
async def request_product_deletion(cb: CallbackQuery, state: FSMContext):
|
||||
await state.clear()
|
||||
product_id = int(cb.data.split(":")[1])
|
||||
await cb.message.edit_reply_markup(reply_markup=admins.confirm_product_deletion(product_id))
|
||||
await cb.answer("Подтвердите удаление товара.")
|
||||
|
||||
|
||||
@router.callback_query(IsVerified(), F.data.regexp(r"^delete_product:confirm:\d+$"))
|
||||
async def delete_product(
|
||||
cb: CallbackQuery,
|
||||
state: FSMContext,
|
||||
session: AsyncSession,
|
||||
products_repo: ProductRepository,
|
||||
):
|
||||
await state.clear()
|
||||
product_id = int(cb.data.split(":")[2])
|
||||
product = await products_repo.get_product_by_id(session, product_id)
|
||||
if not product:
|
||||
await cb.answer("Товар уже удалён.", show_alert=True)
|
||||
return
|
||||
|
||||
category_id = product.category_id
|
||||
try:
|
||||
await products_repo.delete_product(session, product_id)
|
||||
except Exception:
|
||||
await session.rollback()
|
||||
logger.exception("Failed to delete product %s", product_id)
|
||||
await cb.answer("Не удалось удалить товар: он используется в заказах.", show_alert=True)
|
||||
return
|
||||
|
||||
await cb.message.delete()
|
||||
await cb.message.answer("✅ Товар удалён.", reply_markup=get_back_to_catalogue(category_id))
|
||||
await cb.answer()
|
||||
|
||||
|
||||
@router.callback_query(F.data.startswith("edit:"))
|
||||
async def edit_entry(cb: CallbackQuery, state: FSMContext):
|
||||
await state.clear()
|
||||
|
||||
Reference in New Issue
Block a user