Приветствую! Не так давно написал мидлварь для регистрации обычных пользователей и рефералов, вроде бы всё проверил, но смущает размер кода, от этого ощущение, что я много где накосячил
class RegisterCheck(BaseMiddleware):
async def __call__(
self,
handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]],
event: Union[Message, CallbackQuery],
data: Dict[str, Any]):
session_maker: sessionmaker = async_session
async with session_maker() as session:
async with session.begin():
start_message = r"https://t.me/[\w]+?\?start=\d+"
result = await session.execute(select(Users).where(Users.user_id == event.from_user.id))
user = result.scalar()
if isinstance(event, Message):
if event.chat.type == 'private':
if event.text != start_message:
if user is not None:
pass
else:
user = Users(
user_id=event.from_user.id,
user_name=event.from_user.username
)
await session.merge(user)
else:
if user is not None:
pass
else:
user = Users(
user_id=event.from_user.id,
user_name=event.from_user.username,
referrer=event.text
)
await session.merge(user)
else:
if user is not None:
pass
else:
user = Users(
user_id=event.from_user.id,
user_name=event.from_user.username
)
await session.merge(user)
return await handler(event, data)
Как можно улучшить этот код? Из первого, что приходит на ум - заменить условные операторы на match/case, но может ещё что-то можно сделать?