Интегрировал биллинг при оплате подписки
This commit is contained in:
@@ -68,30 +68,30 @@ class PostgresRepository:
|
||||
return False
|
||||
|
||||
|
||||
async def update_balance(self, user: User, amount: float):
|
||||
"""
|
||||
Обновляет баланс пользователя.
|
||||
# async def update_balance(self, user: User, amount: float):
|
||||
# """
|
||||
# Обновляет баланс пользователя.
|
||||
|
||||
:param user: Объект пользователя.
|
||||
:param amount: Сумма для добавления/вычитания.
|
||||
:return: True, если успешно, иначе False.
|
||||
"""
|
||||
self.logger.info(f"Обновление баланса пользователя: id={user.telegram_id}, current_balance={user.balance}, amount={amount}")
|
||||
async for session in self.session_generator():
|
||||
try:
|
||||
user = await session.get(User, user.telegram_id) # Загружаем пользователя в той же сессии
|
||||
if not user:
|
||||
self.logger.warning(f"Пользователь с ID {user.telegram_id} не найден.")
|
||||
return False
|
||||
# Приведение amount к Decimal
|
||||
user.balance += Decimal(amount)
|
||||
await session.commit()
|
||||
self.logger.info(f"Баланс пользователя id={user.telegram_id} успешно обновлен: new_balance={user.balance}")
|
||||
return True
|
||||
except SQLAlchemyError as e:
|
||||
self.logger.error(f"Ошибка при обновлении баланса пользователя id={user.telegram_id}: {e}")
|
||||
await session.rollback()
|
||||
return False
|
||||
# :param user: Объект пользователя.
|
||||
# :param amount: Сумма для добавления/вычитания.
|
||||
# :return: True, если успешно, иначе False.
|
||||
# """
|
||||
# self.logger.info(f"Обновление баланса пользователя: id={user.telegram_id}, current_balance={user.balance}, amount={amount}")
|
||||
# async for session in self.session_generator():
|
||||
# try:
|
||||
# user = await session.get(User, user.telegram_id) # Загружаем пользователя в той же сессии
|
||||
# if not user:
|
||||
# self.logger.warning(f"Пользователь с ID {user.telegram_id} не найден.")
|
||||
# return False
|
||||
# # Приведение amount к Decimal
|
||||
# user.balance += Decimal(amount)
|
||||
# await session.commit()
|
||||
# self.logger.info(f"Баланс пользователя id={user.telegram_id} успешно обновлен: new_balance={user.balance}")
|
||||
# return True
|
||||
# except SQLAlchemyError as e:
|
||||
# self.logger.error(f"Ошибка при обновлении баланса пользователя id={user.telegram_id}: {e}")
|
||||
# await session.rollback()
|
||||
# return False
|
||||
|
||||
async def get_last_transactions(self, user_telegram_id: int, limit: int = 10):
|
||||
"""
|
||||
@@ -139,7 +139,35 @@ class PostgresRepository:
|
||||
except SQLAlchemyError as e:
|
||||
self.logger.error(f"Ошибка при получении подписки для пользователя {user_telegram_id}: {e}")
|
||||
return None
|
||||
|
||||
async def delete_subscription(self, subscription_id: UUID) -> bool:
|
||||
"""
|
||||
Удаляет подписку по её ID.
|
||||
|
||||
:param subscription_id: UUID подписки для удаления
|
||||
:return: True если удалено успешно, False в случае ошибки
|
||||
"""
|
||||
async for session in self.session_generator():
|
||||
try:
|
||||
result = await session.execute(
|
||||
select(Subscription).where(Subscription.id == subscription_id)
|
||||
)
|
||||
subscription = result.scalars().first()
|
||||
|
||||
if not subscription:
|
||||
self.logger.warning(f"Подписка с ID {subscription_id} не найдена")
|
||||
return False
|
||||
|
||||
await session.delete(subscription)
|
||||
await session.commit()
|
||||
|
||||
self.logger.info(f"Подписка с ID {subscription_id} успешно удалена")
|
||||
return True
|
||||
|
||||
except SQLAlchemyError as e:
|
||||
self.logger.error(f"Ошибка при удалении подписки {subscription_id}: {e}")
|
||||
await session.rollback()
|
||||
return False
|
||||
|
||||
async def add_record(self, record):
|
||||
"""
|
||||
Добавляет запись в базу данных.
|
||||
|
||||
Reference in New Issue
Block a user