From f16cb3bc2e45e739e2a09607ad62e678323c99cc Mon Sep 17 00:00:00 2001 From: Vladimir Date: Fri, 5 Dec 2025 13:58:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D1=81=D1=87=D1=91=D1=82=20=D0=BA=D0=BE=D0=BB?= =?UTF-8?q?=D0=B8=D1=87=D0=B5=D1=81=D1=82=D0=B2=D0=B0=20=D1=80=D0=B5=D1=84?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/routes/user_routes.py | 23 +++++++++++++++++++++++ app/services/db_manager.py | 12 ++++++++++++ app/services/postgres_rep.py | 22 +++++++++++++++++++++- 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/app/routes/user_routes.py b/app/routes/user_routes.py index c5ab3ae..67ad455 100644 --- a/app/routes/user_routes.py +++ b/app/routes/user_routes.py @@ -170,4 +170,27 @@ async def add_referal( raise HTTPException(status_code=500, detail="Database error") except Exception as e: logger.exception(f"Неожиданная ошибка при добавлении рефералу {referrer_id}: {e}") + raise HTTPException(status_code=500, detail=str(e)) + + +@router.get("/user/{telegram_id}/referrals", summary="Получить колво рефералов") +async def get_referral_count( + telegram_id: int, + db_manager: DatabaseManager = Depends(get_database_manager) +): + try: + result = await db_manager.get_referrals_count(telegram_id) + if result == "ERROR": + logger.error(f"Ошибка получения рефералов для пользователя: {telegram_id}") + raise HTTPException(status_code=500, detail="Failed to get referrals") + logger.info(f"Количество приглашённых {result}") + return {"invited_count": result} + except HTTPException as http_ex: + logger.warning(f"HTTP ошибка: {http_ex.detail}") + raise http_ex + except SQLAlchemyError as db_ex: + logger.error(f"Ошибка базы данных при получении рефералов пользователя {telegram_id}: {db_ex}") + raise HTTPException(status_code=500, detail="Database error") + except Exception as e: + logger.exception(f"Неожиданная ошибка при получении рефералов {telegram_id}: {e}") raise HTTPException(status_code=500, detail=str(e)) \ No newline at end of file diff --git a/app/services/db_manager.py b/app/services/db_manager.py index 14c8fe0..23541dd 100644 --- a/app/services/db_manager.py +++ b/app/services/db_manager.py @@ -61,6 +61,18 @@ class DatabaseManager: """ return await self.postgres_repo.get_last_transactions(telegram_id, limit) + async def get_referrals_count(self,telegram_id: int) -> int: + """ + Docstring for get_referrals_count + + :param self: Description + :param telegram_id: Description + :type telegram_id: int + :return: Description + :rtype: int + """ + return await self.postgres_repo.get_referrals_count(telegram_id) + # async def update_balance(self, telegram_id: int, amount: float): # """ # Обновляет баланс пользователя и добавляет транзакцию. diff --git a/app/services/postgres_rep.py b/app/services/postgres_rep.py index d36d371..d5431a4 100644 --- a/app/services/postgres_rep.py +++ b/app/services/postgres_rep.py @@ -277,4 +277,24 @@ class PostgresRepository: except SQLAlchemyError as e: self.logger.error(f"Ошибка при поиске плана: {plan_id}: {e}") await session.rollback() - return None \ No newline at end of file + return None + + async def get_referrals_count(self, user_telegram_id: int) -> int: + """ + Получить количество рефералов пользователя. + + :param user_telegram_id: Telegram ID пользователя-пригласителя + :return: Количество рефералов + """ + async for session in self.session_generator(): + try: + result = await session.execute( + select(Referral) + .where(Referral.inviter_id == user_telegram_id) + ) + referrals = result.scalars().all() + return len(referrals) + except SQLAlchemyError as e: + self.logger.error(f"Ошибка при получении количества рефералов для пользователя {user_telegram_id}: {e}") + return 0 + \ No newline at end of file