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] Просматривать информацию о мероприятии
- [ ] Регистрироваться на мероприятие
- [ ] Отменять регистрацию на мероприятие
---
## Планируемые возможности
- Прямая ссылка на событие извне бота
- Прямая ссылка на мероприятие извне бота
- Подтверждение регистрации администратором
- Число записавшихся на событие пользователей у администратора
- Уведомление пользователям о изменении события, на которые они подписаны
- Значок о регистрации на событие в списке событий у пользователя
- Выгружать людей записавшихся на событие в виде Excel файла
- Число записавшихся на мероприятие пользователей у администратора
- Уведомление пользователям о изменении мероприятия, на которые они подписаны
- Значок о регистрации на мероприятие в списке мероприятий у пользователя
- Выгружать людей записавшихся на мероприятие в виде Excel файла

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 .handlers import change_registration, on_event_selected
from .states import EventsSG
events_dialog = Dialog(
Window(
Const("События"),
Const("Мероприятия"),
Column(
Cancel(Const("Назад")),
Select(
@@ -26,6 +26,13 @@ events_dialog = Dialog(
),
Window(
Jinja(event_template),
Button(
Case(
[Const("зарегистрироваться"), Const("отменить регистрацию")],
selector="is_registered_to_event",
),
on_click=change_registration,
),
Back(Const("Назад")),
getter=event_getter,
parse_mode="HTML",

View File

@@ -1,7 +1,11 @@
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.models import Event
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]}
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"]),
)
}
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
await manager.next()
async def change_registration():
...

View File

@@ -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",

30
ui.md
View File

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