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(
|
status = await verify_student(
|
||||||
tg_user=telegram_user,
|
tg_user=telegram_user,
|
||||||
name=data["full_name"],
|
name=data["full_name"],
|
||||||
student_id=int(data["self_id"]),
|
self_id=int(data["self_id"]),
|
||||||
is_student=data["role"] == "student",
|
is_student=data["role"] == "student",
|
||||||
group_id=data["group_id"],
|
group_id=data["group_id"],
|
||||||
session=session,
|
session=session,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
from aiogram import F
|
|
||||||
from aiogram.fsm.context import FSMContext
|
from aiogram.fsm.context import FSMContext
|
||||||
from aiogram.types import Message
|
from aiogram.types import Message
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,4 @@ class VerificationStatus(Enum):
|
||||||
|
|
||||||
NOT_FOUND = auto()
|
NOT_FOUND = auto()
|
||||||
|
|
||||||
ALREADY_BOUND_TO_CURRENT_ACCOUNT = auto()
|
ACCOUNT_ALREADY_BOUND = auto()
|
||||||
|
|
||||||
ALREADY_BOUND_TO_ANOTHER_ACCOUNT = auto()
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ __all__ = [
|
||||||
|
|
||||||
|
|
||||||
from loguru import logger as loguru_logger
|
from loguru import logger as loguru_logger
|
||||||
from sqlalchemy.exc import NoResultFound
|
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from sqlalchemy.future import select
|
from sqlalchemy.future import select
|
||||||
|
|
||||||
|
|
@ -39,7 +38,7 @@ async def verify_student(
|
||||||
tg_user: TelegramUser,
|
tg_user: TelegramUser,
|
||||||
name: str,
|
name: str,
|
||||||
is_student: bool,
|
is_student: bool,
|
||||||
student_id: int,
|
self_id: int,
|
||||||
group_id: str,
|
group_id: str,
|
||||||
session: AsyncSession,
|
session: AsyncSession,
|
||||||
) -> VerificationStatus:
|
) -> VerificationStatus:
|
||||||
|
|
@ -58,44 +57,56 @@ async def verify_student(
|
||||||
VerificationStatus: result of the verification process.
|
VerificationStatus: result of the verification process.
|
||||||
"""
|
"""
|
||||||
if tg_user.university_member_id is not None:
|
if tg_user.university_member_id is not None:
|
||||||
return VerificationStatus.ALREADY_BOUND_TO_CURRENT_ACCOUNT
|
return VerificationStatus.ACCOUNT_ALREADY_BOUND
|
||||||
|
|
||||||
query = (
|
if is_student:
|
||||||
select(Student)
|
query = (
|
||||||
.where(Student.name == name)
|
select(Student)
|
||||||
.where(Student.student_id == student_id)
|
.where(Student.name == name)
|
||||||
.where(Student.group_id == group_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)
|
result = await session.execute(query)
|
||||||
|
found_member = result.scalar_one_or_none()
|
||||||
|
|
||||||
try:
|
if found_member is None:
|
||||||
student = result.scalar_one()
|
|
||||||
|
|
||||||
if student.tg_users:
|
|
||||||
return VerificationStatus.ALREADY_BOUND_TO_ANOTHER_ACCOUNT
|
|
||||||
|
|
||||||
except NoResultFound:
|
|
||||||
# FIXME: placeholder.
|
# FIXME: placeholder.
|
||||||
# In a real scenario we should return NOT_FOUND.
|
# 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(
|
student = Student(
|
||||||
name=name,
|
name=name,
|
||||||
student_id=student_id,
|
student_id=self_id,
|
||||||
group_id=group_id,
|
group_id=group_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
session.add(student)
|
session.add(student)
|
||||||
|
tg_user.university_member_id = student.id # pyrefly: ignore
|
||||||
|
student.tg_users.append(tg_user)
|
||||||
|
|
||||||
tg_user.university_member_id = student.id # pyrefly: ignore
|
await session.commit()
|
||||||
|
|
||||||
student.tg_users.append(tg_user)
|
loguru_logger.debug(
|
||||||
|
f"Successfully bound user {tg_user.id} to student {student.id}"
|
||||||
|
)
|
||||||
|
|
||||||
|
return VerificationStatus.SUCCESSFULLY_BOUND
|
||||||
|
|
||||||
|
found_member.tg_users.append(tg_user)
|
||||||
|
|
||||||
await session.commit()
|
await session.commit()
|
||||||
|
|
||||||
loguru_logger.debug(
|
loguru_logger.debug(
|
||||||
f"Successfully bound user {tg_user.id} to student {student.id}"
|
f"Successfully bound user {tg_user.id} "
|
||||||
|
f"to university_member {found_member.id}"
|
||||||
)
|
)
|
||||||
|
|
||||||
return VerificationStatus.SUCCESSFULLY_BOUND
|
return VerificationStatus.SUCCESSFULLY_BOUND
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ class RouterRegistry:
|
||||||
if isinstance(chat_types, ChatType):
|
if isinstance(chat_types, ChatType):
|
||||||
chat_types = [chat_types]
|
chat_types = [chat_types]
|
||||||
|
|
||||||
if isinstance(filters, Filter):
|
if isinstance(filters, (Filter, State)):
|
||||||
filters = [filters]
|
filters = [filters]
|
||||||
elif filters is None:
|
elif filters is None:
|
||||||
filters = list()
|
filters = list()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue