STABLE: Final schema sync, optimized gitignore

This commit is contained in:
Kincses
2026-02-26 08:19:25 +01:00
parent 893f39fa15
commit 505543330a
203 changed files with 11590 additions and 9542 deletions

View File

@@ -1,80 +1,89 @@
# /opt/docker/dev/service_finder/backend/app/test_gamification_flow.py
import asyncio
import sys
import os
from pathlib import Path
# FONTOS: A dotenv betöltése minden app-specifikus import ELŐTT kell megtörténjen!
from dotenv import load_dotenv
env_path = Path("/home/coder/project/opt/service_finder/.env")
load_dotenv(dotenv_path=env_path)
# Útvonal beállítása a modulokhoz
sys.path.append("/home/coder/project/opt/service_finder/backend")
# Most már importálhatjuk a session-t, mert a környezeti változók már a memóriában vannak
import sys
import logging
from sqlalchemy import select
from app.db.session import AsyncSessionLocal # Javítva: AsyncSessionLocal-t használunk
from app.services.social_service import create_service_provider
from app.models.gamification import UserStats, PointsLedger
from app.models.user import User
from dotenv import load_dotenv
# Környezeti változók betöltése
load_dotenv()
# MB2.0 Importok
from app.database import AsyncSessionLocal
from app.models.identity import User
from app.models.system import UserStats, PointsLedger
from app.services.social_service import SocialService
from app.schemas.social import ServiceProviderCreate
# Naplózás beállítása
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] Sentinel-Test: %(message)s')
logger = logging.getLogger("Gamification-Test")
async def run_test():
print("🚀 Gamifikációs integrációs teszt indul...")
logger.info("🚀 Gamifikációs integrációs folyamat tesztelése...")
# Az AsyncSessionLocal() egy context manager, így az 'async with' a helyes használat
async with AsyncSessionLocal() as db:
try:
# 1. Teszt felhasználó lekérése
# 1. LOGIKA: Teszt felhasználó lekérése az identity sémából
result = await db.execute(select(User).limit(1))
user = result.scalars().first()
if not user:
print("❌ Hiba: Nincs felhasználó az adatbázisban a teszthez!")
logger.error("❌ Hiba: Nincs felhasználó az adatbázisban. Futtasd a seed_system.py-t!")
return
print(f"👤 Teszt felhasználó: {user.email} (ID: {user.id})")
logger.info(f"👤 Aktív teszt alany: {user.email}")
# 2. Új szolgáltató rögzítése (ez váltja ki a pontszerzést)
unique_suffix = os.urandom(2).hex()
# 2. LOGIKA: Új szolgáltató rögzítése (Trigger az XP szerzéshez)
# A SocialService.create_service_provider automatikusan hívja a GamificationService-t
unique_id = os.urandom(2).hex()
test_provider = ServiceProviderCreate(
name=f"Teszt Szerviz {unique_suffix}",
address="Teszt utca 123.",
category="Service"
name=f"Robot Szerviz {unique_id}",
address="Alchemist utca 12.",
category="service"
)
print(f"🛠️ Szolgáltató rögzítése: {test_provider.name}...")
new_provider = await create_service_provider(db, test_provider, user.id)
print(f"✅ Szolgáltató rögzítve (ID: {new_provider.id})")
logger.info(f"🛠️ Esemény kiváltása: '{test_provider.name}' rögzítése...")
new_provider = await SocialService.create_service_provider(db, test_provider, user.id)
# Commit kényszerítése, hogy a háttérfolyamatok rögzüljenek
await db.commit()
logger.info(f"✅ Szolgáltató elfogadva (ID: {new_provider.id})")
# 3. Pontszám és napló ellenőrzése
# Megjegyzés: A social_service commit-ol, így itt újra le kell kérnünk az adatokat
# 3. LOGIKA: Eredmények ellenőrzése a Ledgerben (Főkönyv)
# Újra lekérjük a statisztikákat a commit után
stats_res = await db.execute(select(UserStats).where(UserStats.user_id == user.id))
stats = stats_res.scalar_one_or_none()
ledger_res = await db.execute(
select(PointsLedger)
.where(PointsLedger.user_id == user.id)
.order_by(PointsLedger.id.desc())
.order_by(PointsLedger.created_at.desc())
.limit(1)
)
last_entry = ledger_res.scalars().first()
print("\n" + "="*30)
print("📊 TESZT EREDMÉNYEK:")
print("\n" + ""*40)
print("📊 INTEGRÁCIÓS JELENTÉS:")
if stats:
print(f"🏆 Összesített pontszám: {stats.total_points}")
print(f"📈 Aktuális szint: {stats.current_level}")
print(f"🏆 Aktuális XP: {stats.total_xp}")
print(f"📈 Szint: {stats.current_level}")
else:
print("⚠️ Figyelem: UserStats nem található (lehet, hogy most készült el?)")
print("⚠️ UserStats rekord nem található!")
if last_entry:
print(f"📝 Utolsó tranzakció: {last_entry.reason}")
print(f"💰 Jóváírt pont: {last_entry.points_change}")
print("="*30)
print(f"📝 Tranzakció oka: {last_entry.reason}")
print(f"💰 XP változás: +{last_entry.points_change}")
print(""*40 + "\n")
if stats and stats.total_xp > 0:
logger.info("✅ SIKER: A gamifikációs lánc éles és működik!")
else:
logger.warning("❌ HIBA: A pontszámítás nem történt meg.")
except Exception as e:
print(f"💥 Kritikus hiba a teszt futtatása közben: {str(e)}")
logger.error(f"💥 Kritikus hiba a teszt közben: {e}")
import traceback
traceback.print_exc()