Initial project commit
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.models.point_ledger import PointLedger
|
||||
|
||||
|
||||
async def grant_points(
|
||||
db: AsyncSession,
|
||||
user_id: int,
|
||||
change: int,
|
||||
reason: str,
|
||||
ref_type: str | None = None,
|
||||
ref_id: int | None = None,
|
||||
) -> PointLedger:
|
||||
last_entry = await db.execute(
|
||||
select(PointLedger)
|
||||
.where(PointLedger.user_id == user_id)
|
||||
.order_by(PointLedger.id.desc())
|
||||
.limit(1)
|
||||
)
|
||||
last = last_entry.scalar_one_or_none()
|
||||
current_balance = last.balance if last else 0
|
||||
|
||||
ledger = PointLedger(
|
||||
user_id=user_id,
|
||||
change=change,
|
||||
balance=current_balance + change,
|
||||
reason=reason,
|
||||
ref_type=ref_type,
|
||||
ref_id=ref_id,
|
||||
)
|
||||
db.add(ledger)
|
||||
await db.flush()
|
||||
return ledger
|
||||
Reference in New Issue
Block a user