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(