fix docker-compose
This commit is contained in:
@@ -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,
|
||||
),
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -12,9 +12,9 @@ from .states import StartSG
|
||||
start_dialog = Dialog(
|
||||
Window(
|
||||
Format("Привет, {user.fullname}"),
|
||||
Start(Const("📃 события"), id="events", state=EventsSG.events_list),
|
||||
Start(Const("📃 мероприятия"), id="events", state=EventsSG.events_list),
|
||||
Start(
|
||||
Const("✏️ создать событие"),
|
||||
Const("✏️ создать мероприятие"),
|
||||
id="create_event",
|
||||
state=NewEventSG.input_title,
|
||||
when="is_admin",
|
||||
|
||||
Reference in New Issue
Block a user