19 lines
543 B
Python
19 lines
543 B
Python
from sqlalchemy import update
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.user.models import User
|
|
|
|
|
|
async def consume_credit(user_uuid, session: AsyncSession) -> bool:
|
|
"""atomic UPDATE로 1크레딧 차감.
|
|
|
|
WHERE credits > 0 조건으로 음수 차감 방지 + PostgreSQL 행 락.
|
|
차감 성공 여부 반환.
|
|
"""
|
|
result = await session.execute(
|
|
update(User)
|
|
.where(User.user_uuid == user_uuid, User.credits > 0)
|
|
.values(credits=User.credits - 1)
|
|
)
|
|
return result.rowcount > 0
|