add telegram username to bd

This commit is contained in:
2025-12-12 21:33:51 +05:00
parent c7454cbb62
commit 7aea18c7fb
3 changed files with 29 additions and 15 deletions

View File

@ -22,7 +22,9 @@ class UserInDB(BaseModel):
is_active: bool = True is_active: bool = True
created_at: datetime = datetime.utcnow() created_at: datetime = datetime.utcnow()
code: Optional[str] = None code: Optional[str] = None
telegram_id: Optional[str] = None telegram_chat_id: Optional[int] = None
telegram_user_id: Optional[int] = None
telegram_username: Optional[str] = None
is_verified: bool = False is_verified: bool = False
code_expires_at: Optional[datetime] = None code_expires_at: Optional[datetime] = None
is_admin: bool = False is_admin: bool = False

View File

@ -58,7 +58,14 @@ class AuthService:
else: else:
raise HTTPException(404, "User not found") raise HTTPException(404, "User not found")
async def verify_code(self, username: str, code: str, telegram_chat_id: int): async def verify_code(
self,
username: str,
code: str,
telegram_chat_id: int,
telegram_user_id: int | None = None,
telegram_username: str | None = None,
):
user = await users_collection.find_one({"username": username}) user = await users_collection.find_one({"username": username})
if not user: if not user:
raise HTTPException(404, "User not found") raise HTTPException(404, "User not found")
@ -66,22 +73,23 @@ class AuthService:
if user["is_verified"]: if user["is_verified"]:
raise HTTPException(400, "User already verified") raise HTTPException(400, "User already verified")
# Проверяем код и привязку к Telegram
if user.get("telegram_chat_id") and user["telegram_chat_id"] != telegram_chat_id: if user.get("telegram_chat_id") and user["telegram_chat_id"] != telegram_chat_id:
raise HTTPException(403, "This account is linked to another Telegram") raise HTTPException(403, "This account is linked to another Telegram")
if user.get("code") != code: if user.get("code") != code:
raise HTTPException(400, "Invalid code") raise HTTPException(400, "Invalid code")
# Обновляем chat_id при первом подтверждении update = {
await users_collection.update_one( "is_verified": True,
{"username": username}, "telegram_chat_id": telegram_chat_id,
{"$set": { "code": None,
"is_verified": True, }
"telegram_chat_id": telegram_chat_id, if telegram_user_id is not None:
"code": None update["telegram_user_id"] = telegram_user_id
}} if telegram_username is not None:
) update["telegram_username"] = telegram_username
await users_collection.update_one({"username": username}, {"$set": update})
return {"status": "success"} return {"status": "success"}
async def get_verification_status(self, username: str): async def get_verification_status(self, username: str):

View File

@ -49,11 +49,15 @@ async def process_code(message: Message, state: FSMContext):
username = data["username"] username = data["username"]
code = message.text.strip() code = message.text.strip()
tg_user = message.from_user
try: try:
await auth_service.verify_code( await auth_service.verify_code(
username=username, username=username,
code=code, code=code,
telegram_chat_id=message.chat.id, telegram_chat_id=message.chat.id,
telegram_user_id=tg_user.id,
telegram_username=tg_user.username,
) )
await message.answer("✅ Аккаунт подтвержден!") await message.answer("✅ Аккаунт подтвержден!")
await state.clear() await state.clear()