feat: add subscription and transaction repositories

- Implemented SubscriptionRepository with methods to get, create, and update subscriptions.
- Added BalanceTXRepository for creating and retrieving balance transactions.
- Introduced a test script for simulating Pally webhook for local testing.
This commit is contained in:
2026-04-27 21:33:25 +07:00
parent 049f31118d
commit 287f8eebda
34 changed files with 3401 additions and 53 deletions

View File

@@ -0,0 +1,41 @@
from datetime import datetime, timezone
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from db.models.transactions import BalanceTransaction, BalanceTxType
class BalanceTXRepository:
async def create(
self,
session: AsyncSession,
user_id: int,
amount: int,
tx_type: BalanceTxType,
balance_before: int,
balance_after: int,
description: str,
) -> BalanceTransaction:
created_at = datetime.now(timezone.UTC)
tx = BalanceTransaction(
user_id=user_id,
amount=amount,
tx_type=tx_type,
balance_before=balance_before,
balance_after=balance_after,
description=description,
created_at=created_at,
)
session.add(tx)
await session.commit()
return tx
async def get_transactions_by_id(
self, session: AsyncSession, user_id: int, limit: int = 50
) -> list[BalanceTransaction]:
stmt = select(BalanceTransaction).where(BalanceTransaction.user_id == user_id).limit(limit)
res = await session.execute(stmt)
return list(res.scalars().all())