49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
from datetime import datetime
|
|
|
|
from sqlalchemy import insert, select
|
|
from sqlalchemy.exc import SQLAlchemyError
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from database.models import Payment
|
|
from logger import logger
|
|
|
|
|
|
async def add_payment(
|
|
session: AsyncSession, tg_id: int, amount: float, payment_system: str
|
|
):
|
|
try:
|
|
stmt = insert(Payment).values(
|
|
tg_id=tg_id,
|
|
amount=amount,
|
|
payment_system=payment_system,
|
|
status="success",
|
|
created_at=datetime.utcnow(),
|
|
)
|
|
await session.execute(stmt)
|
|
await session.commit()
|
|
logger.info(
|
|
f"✅ Успешно добавлен платёж: {tg_id}, {amount}₽ через {payment_system}"
|
|
)
|
|
except SQLAlchemyError as e:
|
|
logger.error(f"❌ Ошибка при добавлении платежа: {e}")
|
|
await session.rollback()
|
|
raise
|
|
|
|
|
|
async def get_last_payments(session: AsyncSession, tg_id: int, limit: int = 3):
|
|
try:
|
|
result = await session.execute(
|
|
select(Payment)
|
|
.where(Payment.tg_id == tg_id)
|
|
.order_by(Payment.created_at.desc())
|
|
.limit(limit)
|
|
)
|
|
payments = result.scalars().all()
|
|
logger.info(
|
|
f"✅ Получены последние платежи пользователя {tg_id}, всего: {len(payments)}"
|
|
)
|
|
return [dict(p.__dict__) for p in payments]
|
|
except SQLAlchemyError as e:
|
|
logger.error(f"❌ Ошибка при получении платежей пользователя {tg_id}: {e}")
|
|
return []
|