generated from geekiot/python-template
Fix [verification]: fix verification status & refactor code
This commit is contained in:
parent
a511f7df3f
commit
680e19b3e7
5 changed files with 36 additions and 28 deletions
|
|
@ -111,7 +111,7 @@ async def call_finish_verification(
|
|||
status = await verify_student(
|
||||
tg_user=telegram_user,
|
||||
name=data["full_name"],
|
||||
student_id=int(data["self_id"]),
|
||||
self_id=int(data["self_id"]),
|
||||
is_student=data["role"] == "student",
|
||||
group_id=data["group_id"],
|
||||
session=session,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
from aiogram import F
|
||||
from aiogram.fsm.context import FSMContext
|
||||
from aiogram.types import Message
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,4 @@ class VerificationStatus(Enum):
|
|||
|
||||
NOT_FOUND = auto()
|
||||
|
||||
ALREADY_BOUND_TO_CURRENT_ACCOUNT = auto()
|
||||
|
||||
ALREADY_BOUND_TO_ANOTHER_ACCOUNT = auto()
|
||||
ACCOUNT_ALREADY_BOUND = auto()
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ __all__ = [
|
|||
|
||||
|
||||
from loguru import logger as loguru_logger
|
||||
from sqlalchemy.exc import NoResultFound
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.future import select
|
||||
|
||||
|
|
@ -39,7 +38,7 @@ async def verify_student(
|
|||
tg_user: TelegramUser,
|
||||
name: str,
|
||||
is_student: bool,
|
||||
student_id: int,
|
||||
self_id: int,
|
||||
group_id: str,
|
||||
session: AsyncSession,
|
||||
) -> VerificationStatus:
|
||||
|
|
@ -58,38 +57,39 @@ async def verify_student(
|
|||
VerificationStatus: result of the verification process.
|
||||
"""
|
||||
if tg_user.university_member_id is not None:
|
||||
return VerificationStatus.ALREADY_BOUND_TO_CURRENT_ACCOUNT
|
||||
return VerificationStatus.ACCOUNT_ALREADY_BOUND
|
||||
|
||||
if is_student:
|
||||
query = (
|
||||
select(Student)
|
||||
.where(Student.name == name)
|
||||
.where(Student.student_id == student_id)
|
||||
.where(Student.student_id == self_id)
|
||||
.where(Student.group_id == group_id)
|
||||
)
|
||||
else:
|
||||
# Fixme: Add Teacher query.
|
||||
# https://github.com/orgs/dibuildo/projects/2/views/1?pane=issue&itemId=135551755
|
||||
query = (
|
||||
select(Student)
|
||||
.where(Student.name == name)
|
||||
.where(Student.student_id == self_id)
|
||||
)
|
||||
|
||||
result = await session.execute(query)
|
||||
found_member = result.scalar_one_or_none()
|
||||
|
||||
try:
|
||||
student = result.scalar_one()
|
||||
|
||||
if student.tg_users:
|
||||
return VerificationStatus.ALREADY_BOUND_TO_ANOTHER_ACCOUNT
|
||||
|
||||
except NoResultFound:
|
||||
if found_member is None:
|
||||
# FIXME: placeholder.
|
||||
# In a real scenario we should return NOT_FOUND.
|
||||
loguru_logger.info(f"Creating new student: {name}")
|
||||
loguru_logger.debug(f"Creating new student: {name}")
|
||||
|
||||
student = Student(
|
||||
name=name,
|
||||
student_id=student_id,
|
||||
student_id=self_id,
|
||||
group_id=group_id,
|
||||
)
|
||||
|
||||
session.add(student)
|
||||
|
||||
tg_user.university_member_id = student.id # pyrefly: ignore
|
||||
|
||||
student.tg_users.append(tg_user)
|
||||
|
||||
await session.commit()
|
||||
|
|
@ -99,3 +99,14 @@ async def verify_student(
|
|||
)
|
||||
|
||||
return VerificationStatus.SUCCESSFULLY_BOUND
|
||||
|
||||
found_member.tg_users.append(tg_user)
|
||||
|
||||
await session.commit()
|
||||
|
||||
loguru_logger.debug(
|
||||
f"Successfully bound user {tg_user.id} "
|
||||
f"to university_member {found_member.id}"
|
||||
)
|
||||
|
||||
return VerificationStatus.SUCCESSFULLY_BOUND
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ class RouterRegistry:
|
|||
if isinstance(chat_types, ChatType):
|
||||
chat_types = [chat_types]
|
||||
|
||||
if isinstance(filters, Filter):
|
||||
if isinstance(filters, (Filter, State)):
|
||||
filters = [filters]
|
||||
elif filters is None:
|
||||
filters = list()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue