README update

This commit is contained in:
2025-10-03 14:45:26 +03:00
parent ceb8e87939
commit 7e5939394d
7 changed files with 47 additions and 57 deletions

View File

@@ -1,32 +1,32 @@
# Бот для записи на курсы и события от школы фасциопатии # Бот для записи на курсы и мероприятия от школы фасциопатии
## Текущие возможности ## Текущие возможности
**Администраторы могут:** **Администраторы могут:**
- [x] Редактировать свой профиль - [x] Редактировать свой профиль
- [x] Создавать события - [x] Создавать мероприятия
- (указав дату, время, название, описание) - (указав дату, время, название, описание)
- [ ] Редактировать события - [ ] Редактировать мероприятия
- Редактировать отдельно любую из характеристик события - Редактировать отдельно любую из характеристик мероприятия
- [ ] Удалять события - [ ] Удалять мероприятия
- [x] Просматривать список существующих событий - [x] Просматривать список существующих мероприятий
- [ ] Просматривать людей записавшихся на событие - [ ] Просматривать людей записавшихся на мероприятие
--- ---
**Пользователи могут:** **Пользователи могут:**
- [x] Редактировать свой профиль - [x] Редактировать свой профиль
- [x] Просматривать список событий - [x] Просматривать список мероприятий
- [x] Просматривать информацию о событии - [x] Просматривать информацию о мероприятии
- [ ] Регистрироваться на событие - [ ] Регистрироваться на мероприятие
- [ ] Отменять регистрацию на событие - [ ] Отменять регистрацию на мероприятие
--- ---
## Планируемые возможности ## Планируемые возможности
- Прямая ссылка на событие извне бота - Прямая ссылка на мероприятие извне бота
- Подтверждение регистрации администратором - Подтверждение регистрации администратором
- Число записавшихся на событие пользователей у администратора - Число записавшихся на мероприятие пользователей у администратора
- Уведомление пользователям о изменении события, на которые они подписаны - Уведомление пользователям о изменении мероприятия, на которые они подписаны
- Значок о регистрации на событие в списке событий у пользователя - Значок о регистрации на мероприятие в списке мероприятий у пользователя
- Выгружать людей записавшихся на событие в виде Excel файла - Выгружать людей записавшихся на мероприятие в виде Excel файла

View File

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

View File

@@ -1,7 +1,11 @@
from aiogram.types import User from aiogram.types import User
from aiogram_dialog import DialogManager 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.models import Event
async def events_list_getter( async def events_list_getter(
@@ -11,12 +15,18 @@ async def events_list_getter(
return {"events": [{"title": event.title, "id": event.id} for event in events]} return {"events": [{"title": event.title, "id": event.id} for event in events]}
async def event_getter( async def event_getter(dialog_manager: DialogManager, **kwargs) -> dict[str, Event]:
dialog_manager: DialogManager, **kwargs
) -> dict[str, str]:
return { return {
"event_obj": await get_event_by_id( "event_obj": await get_event_by_id(
dialog_manager.middleware_data["session"], dialog_manager.middleware_data["session"],
int(dialog_manager.dialog_data["selected_event"]), int(dialog_manager.dialog_data["selected_event"]),
) )
} }
async def registraion_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 for ue in user.events)
}

View File

@@ -11,3 +11,6 @@ async def on_event_selected(
): ):
manager.dialog_data["selected_event"] = item_id manager.dialog_data["selected_event"] = item_id
await manager.next() await manager.next()
async def change_registration():
...

View File

@@ -12,9 +12,9 @@ from .states import StartSG
start_dialog = Dialog( start_dialog = Dialog(
Window( Window(
Format("Привет, {user.fullname}"), Format("Привет, {user.fullname}"),
Start(Const("📃 события"), id="events", state=EventsSG.events_list), Start(Const("📃 мероприятия"), id="events", state=EventsSG.events_list),
Start( Start(
Const("✏️ создать событие"), Const("✏️ создать мероприятие"),
id="create_event", id="create_event",
state=NewEventSG.input_title, state=NewEventSG.input_title,
when="is_admin", when="is_admin",

View File

@@ -94,4 +94,4 @@ async def update_event(
if end_date: if end_date:
event.end_date = end_date event.end_date = end_date
await session.commit() await session.commit()
return event return event

30
ui.md
View File

@@ -1,30 +0,0 @@
Пользователь
### Приветствие
Здрвствуйте, {Username}\
Вот текущие события
- ✅ Видим руками уровень 1
- Видим руками уровень 2
- Видим руками уровень 3
---
### Информация о событии
**Видим руками уровень 1**
На этом курсе вы научитесь...
[Вы записаны] / [Вы не записаны]
- Записаться
- Отменить запись
- Назад
---
## Регистарация в системе
### Регистрация шаг 1/2
- Укажите свой номер телефона
### Регистрация шаг 2/2
- Укажите свое ФИО
## Редактировать профиль
// Запускаем регистрацию заново