diff --git a/src/quizzi/application/bot/handlers.py b/src/quizzi/application/bot/handlers.py
index 59344ed..4dbff34 100644
--- a/src/quizzi/application/bot/handlers.py
+++ b/src/quizzi/application/bot/handlers.py
@@ -32,8 +32,9 @@ async def ensure_user_registered(
existing_user = await user_dao.get_by_id(message.from_user.id)
groups = await group_dao.get_all()
+ has_groups = len(groups) > 0
- start_data = {"user_id": message.from_user.id}
+ start_data = {"user_id": message.from_user.id, "has_groups": has_groups}
if pending_test_id:
start_data["pending_test_id"] = pending_test_id
@@ -44,28 +45,30 @@ async def ensure_user_registered(
username=message.from_user.username,
last_name=message.from_user.last_name,
)
- if len(groups) > 0:
- await dialog_manager.start(
- UserRegistrationSG.input_name,
- mode=StartMode.RESET_STACK,
- data=start_data
- )
- return False
- return True
+ await dialog_manager.start(
+ UserRegistrationSG.input_name,
+ mode=StartMode.RESET_STACK,
+ data=start_data
+ )
+ return False
- if len(groups) > 0 and (existing_user.name is None or existing_user.group is None):
- if existing_user.name is None:
- await dialog_manager.start(
- UserRegistrationSG.input_name,
- mode=StartMode.RESET_STACK,
- data=start_data
- )
- else:
- await dialog_manager.start(
- UserRegistrationSG.select_group,
- mode=StartMode.RESET_STACK,
- data=start_data
- )
+ needs_name = existing_user.name is None
+ needs_group = has_groups and existing_user.group is None
+
+ if needs_name:
+ await dialog_manager.start(
+ UserRegistrationSG.input_name,
+ mode=StartMode.RESET_STACK,
+ data=start_data
+ )
+ return False
+
+ if needs_group:
+ await dialog_manager.start(
+ UserRegistrationSG.select_group,
+ mode=StartMode.RESET_STACK,
+ data=start_data
+ )
return False
await user_dao.upsert(
diff --git a/src/quizzi/application/bot/user_dialogs/main_menu.py b/src/quizzi/application/bot/user_dialogs/main_menu.py
index 5bc8895..6b04c1c 100644
--- a/src/quizzi/application/bot/user_dialogs/main_menu.py
+++ b/src/quizzi/application/bot/user_dialogs/main_menu.py
@@ -436,7 +436,7 @@ user_menu_dialog = Dialog(
getter=get_test_detail,
),
Window(
- Const("✏️ Изменение имени\n\nВведите новое имя:"),
+ Const("✏️ Изменение имени\n\nВведите имя и фамилию:"),
MessageInput(on_name_input),
Button(Const("◀️ Назад"), id="back", on_click=on_back_to_main),
state=UserMenuSG.edit_name,
diff --git a/src/quizzi/application/bot/user_dialogs/registration.py b/src/quizzi/application/bot/user_dialogs/registration.py
index 6e12ed1..8b5407a 100644
--- a/src/quizzi/application/bot/user_dialogs/registration.py
+++ b/src/quizzi/application/bot/user_dialogs/registration.py
@@ -9,6 +9,7 @@ from dishka.integrations.aiogram_dialog import inject
from quizzi.application.bot.user_dialogs.states import UserDeeplinkSG, UserMenuSG, UserRegistrationSG
from quizzi.infrastructure.database.dao.group import GroupDAO
from quizzi.infrastructure.database.dao.user import UserDAO
+from quizzi.infrastructure.utils.timezone import now_msk_naive
@inject
@@ -35,11 +36,24 @@ async def on_name_input(
start_data = manager.start_data or {}
assert isinstance(start_data, dict)
user_id = start_data.get("user_id")
+ has_groups = start_data.get("has_groups", True)
+ pending_test_id = start_data.get("pending_test_id")
+
if user_id:
- await user_dao.update(user_id=user_id, name=name)
+ await user_dao.update(user_id=user_id, name=name, name_updated_at=now_msk_naive())
manager.dialog_data["name"] = name
- await manager.switch_to(UserRegistrationSG.select_group)
+
+ if has_groups:
+ await manager.switch_to(UserRegistrationSG.select_group)
+ elif pending_test_id:
+ await manager.start(
+ UserDeeplinkSG.test_preview,
+ mode=StartMode.RESET_STACK,
+ data={"test_id": pending_test_id}
+ )
+ else:
+ await manager.start(UserMenuSG.main, mode=StartMode.RESET_STACK)
@inject
@@ -66,7 +80,7 @@ async def on_group_selected(
pending_test_id = start_data.get("pending_test_id")
if user_id:
- await user_dao.update(user_id=user_id, group=int(item_id))
+ await user_dao.update(user_id=user_id, group=int(item_id), group_updated_at=now_msk_naive())
if pending_test_id:
await manager.start(