from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select, update from app.models.translation import Translation from typing import Dict class TranslationService: # Ez a memória-cache tárolja az élesített szövegeket _published_cache: Dict[str, Dict[str, str]] = {} @classmethod async def load_cache(cls, db: AsyncSession): """Betölti az összes PUBLIKÁLT fordítást az adatbázisból a memóriába.""" result = await db.execute( select(Translation).where(Translation.is_published == True) ) translations = result.scalars().all() cls._published_cache = {} for t in translations: if t.lang_code not in cls._published_cache: cls._published_cache[t.lang_code] = {} cls._published_cache[t.lang_code][t.key] = t.value print(f"🌍 i18n Cache: {len(translations)} szöveg élesítve.") @classmethod def get_text(cls, key: str, lang: str = "en") -> str: """Villámgyors lekérés a memóriából Fallback logikával.""" # 1. Kért nyelv text = cls._published_cache.get(lang, {}).get(key) if text: return text # 2. Fallback: Angol if lang != "en": text = cls._published_cache.get("en", {}).get(key) if text: return text return f"[{key}]" @classmethod async def publish_all(cls, db: AsyncSession): """Élesíti a piszkozatokat és frissíti a szerver memóriáját.""" await db.execute( update(Translation).where(Translation.is_published == False).values(is_published=True) ) await db.commit() await cls.load_cache(db)