43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
from datetime import datetime
|
|
|
|
from sqlalchemy import delete, select
|
|
from sqlalchemy.dialects.postgresql import insert
|
|
from sqlalchemy.exc import SQLAlchemyError
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from database.models import TemporaryData
|
|
from logger import logger
|
|
|
|
|
|
async def create_temporary_data(session: AsyncSession, tg_id: int, state: str, data: dict):
|
|
try:
|
|
stmt = (
|
|
insert(TemporaryData)
|
|
.values(tg_id=tg_id, state=state, data=data, updated_at=datetime.utcnow())
|
|
.on_conflict_do_update(
|
|
index_elements=[TemporaryData.tg_id],
|
|
set_={"state": state, "data": data, "updated_at": datetime.utcnow()},
|
|
)
|
|
)
|
|
await session.execute(stmt)
|
|
await session.commit()
|
|
logger.info(f"📝 Временные данные сохранены для {tg_id}")
|
|
except SQLAlchemyError as e:
|
|
logger.error(f"❌ Ошибка при сохранении временных данных для {tg_id}: {e}")
|
|
await session.rollback()
|
|
|
|
|
|
async def get_temporary_data(session: AsyncSession, tg_id: int) -> dict | None:
|
|
stmt = select(TemporaryData).where(TemporaryData.tg_id == tg_id)
|
|
result = await session.execute(stmt)
|
|
row = result.scalar_one_or_none()
|
|
if row:
|
|
return {"state": row.state, "data": row.data}
|
|
return None
|
|
|
|
|
|
async def clear_temporary_data(session: AsyncSession, tg_id: int):
|
|
await session.execute(delete(TemporaryData).where(TemporaryData.tg_id == tg_id))
|
|
await session.commit()
|
|
logger.info(f"🗑 Временные данные очищены для {tg_id}")
|