README update
This commit is contained in:
32
README.md
32
README.md
@@ -1,32 +1,32 @@
|
|||||||
# Бот для записи на курсы и события от школы фасциопатии
|
# Бот для записи на курсы и мероприятия от школы фасциопатии
|
||||||
|
|
||||||
## Текущие возможности
|
## Текущие возможности
|
||||||
|
|
||||||
**Администраторы могут:**
|
**Администраторы могут:**
|
||||||
- [x] Редактировать свой профиль
|
- [x] Редактировать свой профиль
|
||||||
- [x] Создавать события
|
- [x] Создавать мероприятия
|
||||||
- (указав дату, время, название, описание)
|
- (указав дату, время, название, описание)
|
||||||
- [ ] Редактировать события
|
- [ ] Редактировать мероприятия
|
||||||
- Редактировать отдельно любую из характеристик события
|
- Редактировать отдельно любую из характеристик мероприятия
|
||||||
- [ ] Удалять события
|
- [ ] Удалять мероприятия
|
||||||
- [x] Просматривать список существующих событий
|
- [x] Просматривать список существующих мероприятий
|
||||||
- [ ] Просматривать людей записавшихся на событие
|
- [ ] Просматривать людей записавшихся на мероприятие
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
**Пользователи могут:**
|
**Пользователи могут:**
|
||||||
- [x] Редактировать свой профиль
|
- [x] Редактировать свой профиль
|
||||||
- [x] Просматривать список событий
|
- [x] Просматривать список мероприятий
|
||||||
- [x] Просматривать информацию о событии
|
- [x] Просматривать информацию о мероприятии
|
||||||
- [ ] Регистрироваться на событие
|
- [ ] Регистрироваться на мероприятие
|
||||||
- [ ] Отменять регистрацию на событие
|
- [ ] Отменять регистрацию на мероприятие
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
## Планируемые возможности
|
## Планируемые возможности
|
||||||
- Прямая ссылка на событие извне бота
|
- Прямая ссылка на мероприятие извне бота
|
||||||
- Подтверждение регистрации администратором
|
- Подтверждение регистрации администратором
|
||||||
- Число записавшихся на событие пользователей у администратора
|
- Число записавшихся на мероприятие пользователей у администратора
|
||||||
- Уведомление пользователям о изменении события, на которые они подписаны
|
- Уведомление пользователям о изменении мероприятия, на которые они подписаны
|
||||||
- Значок о регистрации на событие в списке событий у пользователя
|
- Значок о регистрации на мероприятие в списке мероприятий у пользователя
|
||||||
- Выгружать людей записавшихся на событие в виде Excel файла
|
- Выгружать людей записавшихся на мероприятие в виде Excel файла
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
|||||||
@@ -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():
|
||||||
|
...
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -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
30
ui.md
@@ -1,30 +0,0 @@
|
|||||||
Пользователь
|
|
||||||
### Приветствие
|
|
||||||
Здрвствуйте, {Username}\
|
|
||||||
Вот текущие события
|
|
||||||
|
|
||||||
- ✅ Видим руками уровень 1
|
|
||||||
- Видим руками уровень 2
|
|
||||||
- Видим руками уровень 3
|
|
||||||
|
|
||||||
---
|
|
||||||
### Информация о событии
|
|
||||||
|
|
||||||
**Видим руками уровень 1**
|
|
||||||
На этом курсе вы научитесь...
|
|
||||||
|
|
||||||
[Вы записаны] / [Вы не записаны]
|
|
||||||
- Записаться
|
|
||||||
- Отменить запись
|
|
||||||
- Назад
|
|
||||||
---
|
|
||||||
## Регистарация в системе
|
|
||||||
|
|
||||||
### Регистрация шаг 1/2
|
|
||||||
- Укажите свой номер телефона
|
|
||||||
|
|
||||||
### Регистрация шаг 2/2
|
|
||||||
- Укажите свое ФИО
|
|
||||||
|
|
||||||
## Редактировать профиль
|
|
||||||
// Запускаем регистрацию заново
|
|
||||||
Reference in New Issue
Block a user