Initial commit - Migrated to Dev environment
This commit is contained in:
40
backend/app/services/gamification_service.py
Executable file
40
backend/app/services/gamification_service.py
Executable file
@@ -0,0 +1,40 @@
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from app.models.gamification import UserStats, PointsLedger
|
||||
from sqlalchemy import select
|
||||
|
||||
class GamificationService:
|
||||
@staticmethod
|
||||
async def award_points(db: AsyncSession, user_id: int, points: int, reason: str):
|
||||
"""Pontok jóváírása és a UserStats frissítése"""
|
||||
|
||||
# 1. Bejegyzés a naplóba (Mezőnevek szinkronizálva a modellel)
|
||||
new_entry = PointsLedger(
|
||||
user_id=user_id,
|
||||
points_change=points,
|
||||
reason=reason
|
||||
)
|
||||
db.add(new_entry)
|
||||
|
||||
# 2. Összesített statisztika lekérése/létrehozása
|
||||
result = await db.execute(select(UserStats).where(UserStats.user_id == user_id))
|
||||
stats = result.scalar_one_or_none()
|
||||
|
||||
if not stats:
|
||||
# Ha új a user, létrehozzuk az alap statisztikát
|
||||
stats = UserStats(
|
||||
user_id=user_id,
|
||||
total_points=0,
|
||||
current_level=1
|
||||
)
|
||||
db.add(stats)
|
||||
|
||||
# 3. Pontok hozzáadása
|
||||
stats.total_points += points
|
||||
|
||||
# Itt fogjuk később meghívni a szintlépési logikát
|
||||
# await GamificationService._check_level_up(stats)
|
||||
|
||||
# Fontos: Nem commitolunk itt, hanem hagyjuk, hogy a hívó (SocialService)
|
||||
# egy tranzakcióban mentse el a szolgáltatót és a pontokat!
|
||||
await db.flush()
|
||||
return stats.total_points
|
||||
Reference in New Issue
Block a user