From cd7180c3d7b1415c4691da191fdd2b05cb466199 Mon Sep 17 00:00:00 2001 From: algizn97 Date: Fri, 22 Aug 2025 13:55:50 +0500 Subject: [PATCH] Added the function of getting and updating data in the database for the UserTimer table --- app/telegram/database/requests.py | 76 +++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/app/telegram/database/requests.py b/app/telegram/database/requests.py index 59f58de..00b02f7 100644 --- a/app/telegram/database/requests.py +++ b/app/telegram/database/requests.py @@ -1,4 +1,5 @@ import logging +from datetime import datetime, timedelta from typing import Any logger = logging.getLogger(__name__) @@ -14,7 +15,7 @@ from app.telegram.database.models import User_Additional_Settings as UAS from app.telegram.database.models import Trading_Mode from app.telegram.database.models import Margin_type from app.telegram.database.models import Trigger -from app.telegram.database.models import USER_DEALS +from app.telegram.database.models import USER_DEALS, UserTimer import app.telegram.functions.functions as func # functions @@ -142,10 +143,19 @@ async def get_user_trades(tg_id): return trades -async def update_user_trades(tg_id, symbol, side): +async def update_user_trades(tg_id, **kwargs): async with async_session() as session: - await session.execute(update(USER_DEALS).where(USER_DEALS.tg_id == tg_id).values(symbol = symbol, side = side)) + query = update(USER_DEALS).where(USER_DEALS.tg_id == tg_id).values(**kwargs) + await session.execute(query) + await session.commit() +async def delete_user_trade(tg_id: int, symbol: str): + async with async_session() as session: + await session.execute( + USER_DEALS.__table__.delete().where( + (USER_DEALS.tg_id == tg_id) & (USER_DEALS.symbol == symbol) + ) + ) await session.commit() async def get_for_registration_trading_mode(): @@ -319,4 +329,64 @@ async def update_commission_fee(tg_id, num): await session.commit() +async def get_user_timer(tg_id): + async with async_session() as session: + result = await session.execute(select(UserTimer).where(UserTimer.tg_id == tg_id)) + user_timer = result.scalars().first() + + if not user_timer: + logging.info(f"No timer found for user {tg_id}") + return None + + timer_minutes = user_timer.timer_minutes + timer_start = user_timer.timer_start + timer_end = user_timer.timer_end + + logging.info(f"Timer data for tg_id={tg_id}: " + f"timer_minutes={timer_minutes}, " + f"timer_start={timer_start}, " + f"timer_end={timer_end}") + + remaining = None + if timer_end: + remaining = max(0, int((timer_end - datetime.utcnow()).total_seconds() // 60)) + + return { + "timer_minutes": timer_minutes, + "timer_start": timer_start, + "timer_end": timer_end, + "remaining_minutes": remaining + } + + +async def update_user_timer(tg_id, minutes: int): + async with async_session() as session: + try: + async with async_session() as session: + timer_start = None + timer_end = None + + if minutes > 0: + timer_start = datetime.utcnow() + timer_end = timer_start + timedelta(minutes=minutes) + + result = await session.execute(select(UserTimer).where(UserTimer.tg_id == tg_id)) + user_timer = result.scalars().first() + + if user_timer: + user_timer.timer_minutes = minutes + user_timer.timer_start = timer_start + user_timer.timer_end = timer_end + else: + user_timer = UserTimer( + tg_id=tg_id, + timer_minutes=minutes, + timer_start=timer_start, + timer_end=timer_end + ) + session.add(user_timer) + + await session.commit() + except Exception as e: + logging.error(f"Ошибка обновления таймера пользователя {tg_id}: {e}")