Improve stability and minor fixes

This commit is contained in:
Vladless
2025-02-06 19:01:20 +03:00
parent c82f64980b
commit 0789b3fe9d
10 changed files with 30 additions and 26 deletions
+12 -10
View File
@@ -4,8 +4,8 @@ from typing import Any
import asyncpg
import pytz
from config import CASHBACK, DATABASE_URL, REFERRAL_BONUS_PERCENTAGES
from config import CASHBACK, DATABASE_URL, REFERRAL_BONUS_PERCENTAGES
from logger import logger
@@ -538,14 +538,16 @@ async def get_balance(tg_id: int) -> float:
await conn.close()
async def update_balance(tg_id: int, amount: float, session: Any = None):
async def update_balance(tg_id: int, amount: float, session: Any = None, is_admin: bool = False):
"""
Обновляет баланс пользователя в базе данных с учетом кэшбека.
Кэшбек применяется только для положительных сумм.
Обновляет баланс пользователя в базе данных.
Кэшбек применяется только для положительных сумм, если пополнение НЕ через админку.
Args:
tg_id (int): Telegram ID пользователя.
amount (float): Сумма для обновления баланса.
session (Any, optional): Сессия базы данных. Если не передана, создается новая.
is_admin (bool, optional): Флаг, указывающий, что пополнение идёт через админку. По умолчанию False.
Raises:
Exception: В случае ошибки при подключении к базе данных или обновлении баланса.
"""
@@ -555,12 +557,10 @@ async def update_balance(tg_id: int, amount: float, session: Any = None):
conn = await asyncpg.connect(DATABASE_URL)
session = conn
extra = amount * (CASHBACK / 100.0) if (CASHBACK > 0 and amount > 0) else 0
extra = amount * (CASHBACK / 100.0) if (CASHBACK > 0 and amount > 0 and not is_admin) else 0
total_amount = int(amount + extra)
current_balance = await session.fetchval(
"SELECT balance FROM connections WHERE tg_id = $1", tg_id
)
current_balance = await session.fetchval("SELECT balance FROM connections WHERE tg_id = $1", tg_id)
if current_balance is None:
current_balance = 0
@@ -577,10 +577,12 @@ async def update_balance(tg_id: int, amount: float, session: Any = None):
tg_id,
)
logger.info(
f"Баланс пользователя {tg_id} обновлен. Было: {int(current_balance)}, пополнение: {total_amount}, стало: {new_balance}"
f"Баланс пользователя {tg_id} обновлен. Было: {int(current_balance)}, пополнение: {amount} "
f"({'+ кешбэк' if extra > 0 else 'без кешбэка'}), стало: {new_balance}"
)
await handle_referral_on_balance_update(tg_id, int(amount))
if not is_admin:
await handle_referral_on_balance_update(tg_id, int(amount))
except Exception as e:
logger.error(f"Ошибка при обновлении баланса для пользователя {tg_id}: {e}")