fix docker-compose

This commit is contained in:
2025-10-03 17:33:09 +03:00
parent ceb8e87939
commit 27249be467
13 changed files with 193 additions and 68 deletions

View File

@@ -1,16 +1,16 @@
from aiogram_dialog import Dialog, Window
from aiogram_dialog.widgets.kbd import Back, Cancel, Column, Select
from aiogram_dialog.widgets.text import Const, Format, Jinja
from aiogram_dialog.widgets.kbd import Back, Button, Cancel, Column, Select
from aiogram_dialog.widgets.text import Case, Const, Format, Jinja
from app.bot.dialogs.templates import event_template
from .getters import event_getter, events_list_getter
from .handlers import on_event_selected
from .getters import event_getter, events_list_getter, registration_getter
from .handlers import change_registration, on_event_selected
from .states import EventsSG
events_dialog = Dialog(
Window(
Const("События"),
Const("Мероприятия"),
Column(
Cancel(Const("Назад")),
Select(
@@ -26,8 +26,16 @@ events_dialog = Dialog(
),
Window(
Jinja(event_template),
Button(
Case(
[Const("зарегистрироваться"), Const("отменить регистрацию")],
selector="is_registered_to_event",
),
id="change_registration_btn",
on_click=change_registration,
),
Back(Const("Назад")),
getter=event_getter,
getter=[event_getter, registration_getter],
parse_mode="HTML",
state=EventsSG.event,
),

View File

@@ -1,7 +1,12 @@
from aiogram.types import User
from aiogram_dialog import DialogManager
from app.infrastructure.database.crud import get_event_by_id, get_events_list
from app.infrastructure.database.crud import (
get_event_by_id,
get_events_list,
)
from app.infrastructure.database.enums import UserEventStatus
from app.infrastructure.database.models import Event
async def events_list_getter(
@@ -11,12 +16,21 @@ async def events_list_getter(
return {"events": [{"title": event.title, "id": event.id} for event in events]}
async def event_getter(
dialog_manager: DialogManager, **kwargs
) -> dict[str, str]:
async def event_getter(dialog_manager: DialogManager, **kwargs) -> dict[str, Event]:
return {
"event_obj": await get_event_by_id(
dialog_manager.middleware_data["session"],
int(dialog_manager.dialog_data["selected_event"]),
dialog_manager.dialog_data["selected_event"],
)
}
async def registration_getter(dialog_manager: DialogManager, **kwargs):
user = dialog_manager.middleware_data["user"]
event_id = dialog_manager.dialog_data["selected_event"]
return {
"is_registered_to_event": any(
(ue.event_id == event_id) and (ue.status != UserEventStatus.CANCELLED.value)
for ue in user.events
)
}

View File

@@ -1,6 +1,13 @@
from aiogram.types import CallbackQuery
from aiogram_dialog import DialogManager
from aiogram_dialog.widgets.kbd import Select
from aiogram_dialog.widgets.kbd import Button, Select
from app.infrastructure.database.crud import (
register_user_to_event,
unregister_user_to_event,
)
from .getters import registration_getter
async def on_event_selected(
@@ -9,5 +16,26 @@ async def on_event_selected(
manager: DialogManager,
item_id: str,
):
manager.dialog_data["selected_event"] = item_id
manager.dialog_data["selected_event"] = int(item_id)
await manager.next()
async def change_registration(
callback: CallbackQuery,
widget: Button,
manager: DialogManager,
**kwargs,
):
user = manager.middleware_data["user"]
event_id = manager.dialog_data["selected_event"]
if (await registration_getter(manager))["is_registered_to_event"]:
await unregister_user_to_event(
manager.middleware_data["session"], user.id, event_id
)
else:
if not user.phone:
await callback.answer("Пожалуйста, заполните ваш номер телефона в профиле", show_alert=True)
else:
await register_user_to_event(
manager.middleware_data["session"], user.id, event_id
)