create event

This commit is contained in:
2025-10-03 14:09:43 +03:00
parent 2056558ea8
commit 7734adda8b
18 changed files with 399 additions and 88 deletions

View File

@@ -1,39 +1,34 @@
from aiogram_dialog import Dialog, Window
from aiogram_dialog.widgets.kbd import Back, Cancel, Column, Select
from aiogram_dialog.widgets.text import Const, Format
from aiogram_dialog.widgets.text import Const, Format, Jinja
from .getters import events_getter
from app.bot.dialogs.templates import event_template
from .getters import event_getter, events_list_getter
from .handlers import on_event_selected
from .states import EventsSG
async def on_event_selected(
c,
widget: Select,
manager,
item_id: str,
):
manager.dialog_data["selected_event"] = item_id
await manager.next()
events_dialog = Dialog(
Window(
Const("События"),
Column(
Cancel(Const("Назад")),
Select(
Format("{item}"),
Format("{item[title]}"),
id="categ",
item_id_getter=lambda x: x,
item_id_getter=lambda x: x["id"],
items="events",
on_click=on_event_selected,
),
),
getter=events_getter,
getter=events_list_getter,
state=EventsSG.events_list,
),
Window(
Format("{dialog_data[selected_event]}"),
Jinja(event_template),
Back(Const("Назад")),
getter=event_getter,
parse_mode="HTML",
state=EventsSG.event,
),
)

View File

@@ -1,6 +1,22 @@
from aiogram.types import User
from aiogram_dialog import DialogManager
from app.infrastructure.database.crud import get_event_by_id, get_events_list
async def events_getter(dialog_manager: DialogManager, event_from_user: User, **kwargs) -> dict[str, str]:
return {"events": ["ev1", "ev2", "ev3"]}
async def events_list_getter(
dialog_manager: DialogManager, event_from_user: User, **kwargs
) -> dict[str, str]:
events = await get_events_list(dialog_manager.middleware_data["session"])
return {"events": [{"title": event.title, "id": event.id} for event in events]}
async def event_getter(
dialog_manager: DialogManager, **kwargs
) -> dict[str, str]:
return {
"event_obj": await get_event_by_id(
dialog_manager.middleware_data["session"],
int(dialog_manager.dialog_data["selected_event"]),
)
}

View File

@@ -0,0 +1,13 @@
from aiogram.types import CallbackQuery
from aiogram_dialog import DialogManager
from aiogram_dialog.widgets.kbd import Select
async def on_event_selected(
callback: CallbackQuery,
widget: Select,
manager: DialogManager,
item_id: str,
):
manager.dialog_data["selected_event"] = item_id
await manager.next()