Added the function of getting and updating data in the database for the UserTimer table

This commit is contained in:
algizn97
2025-08-22 13:55:50 +05:00
parent fc381ae6c2
commit cd7180c3d7

View File

@@ -1,4 +1,5 @@
import logging import logging
from datetime import datetime, timedelta
from typing import Any from typing import Any
logger = logging.getLogger(__name__) 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 Trading_Mode
from app.telegram.database.models import Margin_type from app.telegram.database.models import Margin_type
from app.telegram.database.models import Trigger 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 import app.telegram.functions.functions as func # functions
@@ -142,10 +143,19 @@ async def get_user_trades(tg_id):
return trades 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: 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() await session.commit()
async def get_for_registration_trading_mode(): async def get_for_registration_trading_mode():
@@ -319,4 +329,64 @@ async def update_commission_fee(tg_id, num):
await session.commit() 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}")