89 lines
3.1 KiB
Python
89 lines
3.1 KiB
Python
from aiogram import Router, F
|
|
from aiogram.fsm.context import FSMContext
|
|
from aiogram.types import CallbackQuery, InlineKeyboardButton
|
|
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
|
from typing import TYPE_CHECKING
|
|
|
|
from ..context import ContextData, CallbackCommand
|
|
from ....model.user import UserBase
|
|
from ....model.settings import Settings
|
|
from ....model import EntityPermission
|
|
from ....utils.main import (
|
|
check_entity_permission,
|
|
get_entity_item_repr,
|
|
get_entity_descriptor,
|
|
)
|
|
from ..common.routing import route_callback
|
|
|
|
if TYPE_CHECKING:
|
|
from ....main import QBotApp
|
|
|
|
|
|
router = Router()
|
|
|
|
|
|
@router.callback_query(ContextData.filter(F.command == CallbackCommand.ENTITY_DELETE))
|
|
async def entity_delete_callback(query: CallbackQuery, **kwargs):
|
|
callback_data: ContextData = kwargs["callback_data"]
|
|
user: UserBase = kwargs["user"]
|
|
db_session: AsyncSession = kwargs["db_session"]
|
|
app: "QBotApp" = kwargs["app"]
|
|
state: FSMContext = kwargs["state"]
|
|
state_data = await state.get_data()
|
|
kwargs["state_data"] = state_data
|
|
|
|
entity_descriptor = get_entity_descriptor(app=app, callback_data=callback_data)
|
|
|
|
entity = await entity_descriptor.type_.get(
|
|
session=db_session, id=int(callback_data.entity_id)
|
|
)
|
|
|
|
if not check_entity_permission(
|
|
entity=entity, user=user, permission=EntityPermission.DELETE
|
|
):
|
|
return await query.answer(
|
|
text=(await Settings.get(Settings.APP_STRINGS_FORBIDDEN))
|
|
)
|
|
|
|
if callback_data.data == "yes":
|
|
await entity_descriptor.type_.remove(
|
|
session=db_session, id=int(callback_data.entity_id), commit=True
|
|
)
|
|
|
|
await route_callback(message=query, **kwargs)
|
|
|
|
elif not callback_data.data:
|
|
entity = await entity_descriptor.type_.get(
|
|
session=db_session, id=int(callback_data.entity_id)
|
|
)
|
|
|
|
return await query.message.edit_text(
|
|
text=(
|
|
await Settings.get(Settings.APP_STRINGS_CONFIRM_DELETE_P_NAME)
|
|
).format(name=await get_entity_item_repr(entity=entity)),
|
|
reply_markup=InlineKeyboardBuilder()
|
|
.row(
|
|
InlineKeyboardButton(
|
|
text=(await Settings.get(Settings.APP_STRINGS_YES_BTN)),
|
|
callback_data=ContextData(
|
|
command=CallbackCommand.ENTITY_DELETE,
|
|
entity_name=callback_data.entity_name,
|
|
entity_id=callback_data.entity_id,
|
|
form_params=callback_data.form_params,
|
|
data="yes",
|
|
).pack(),
|
|
),
|
|
InlineKeyboardButton(
|
|
text=(await Settings.get(Settings.APP_STRINGS_NO_BTN)),
|
|
callback_data=ContextData(
|
|
command=CallbackCommand.ENTITY_ITEM,
|
|
entity_name=callback_data.entity_name,
|
|
entity_id=callback_data.entity_id,
|
|
form_params=callback_data.form_params,
|
|
).pack(),
|
|
),
|
|
)
|
|
.as_markup(),
|
|
)
|