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
created_at: datetime = datetime.utcnow()
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
code_expires_at: Optional[datetime] = None
is_admin: bool = False

View File

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

View File

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