""" Seed script: Beszúrja a hiányzó "Shop / Kisbolt" (Convenience Store) kategóriát a marketplace.expertise_tags táblába, az "Üzemanyag és Töltőállomás" (ID=755) Level 1 szülő alá. Meglévő kategóriák (már léteznek, nem hozzuk létre újra): - ID=755: Üzemanyag és Töltőállomás (Level 1) - ID=756: Benzinkút (Level 2) - ID=757: Elektromos Töltőállomás (Level 2) Hiányzó kategória (ezt hozza létre a script): - Shop / Kisbolt (Level 2, parent_id=755) Idempotens - ON CONFLICT DO NOTHING miatt többször is futtatható. Futtatás: docker exec sf_api python3 /app/backend/app/scripts/seed_gas_station.py """ import asyncio import logging from sqlalchemy import select, func, text from app.db.session import AsyncSessionLocal from app.models.marketplace.service import ExpertiseTag logger = logging.getLogger(__name__) # A meglévő "Üzemanyag és Töltőállomás" szülő ID-ja FUEL_STATION_PARENT_ID = 755 CATEGORIES_TO_SEED = [ { "key": "shop_kisbolt", # --- 🏗️ i18n JSONB Migration (Phase 3) --- "name_i18n": {"hu": "Shop / Kisbolt", "en": "Shop / Convenience Store"}, "name_hu": "Shop / Kisbolt", "name_en": "Shop / Convenience Store", "category": "fuel", "level": 2, "parent_id": FUEL_STATION_PARENT_ID, "path": "uzemanyag_toltoallomas/shop_kisbolt", "search_keywords": [ "shop", "kisbolt", "convenience", "vegyesbolt", "benzinkút shop", "élelmiszer", "snack", "ital", ], "description": "Benzinkúton üzemelő kisbolt, shop, convenience store", }, ] async def seed_gas_station_categories(): """Beszúrja a hiányzó kategóriákat, ha még nem léteznek.""" async with AsyncSessionLocal() as db: try: for cat in CATEGORIES_TO_SEED: # Ellenőrizzük, hogy létezik-e már stmt = select(ExpertiseTag).where( ExpertiseTag.key == cat["key"] ) result = await db.execute(stmt) existing = result.scalar_one_or_none() if existing: print( f"✅ A '{cat['name_hu']}' kategória " f"már létezik (ID: {existing.id}). Nincs szükség seed-elésre." ) continue # Beszúrás tag = ExpertiseTag( key=cat["key"], name_i18n=cat.get("name_i18n", {"hu": cat["name_hu"], "en": cat["name_en"]}), category=cat["category"], level=cat["level"], parent_id=cat["parent_id"], path=cat["path"], search_keywords=cat["search_keywords"], is_official=True, discovery_points=10, usage_count=0, ) db.add(tag) await db.flush() await db.refresh(tag) print( f"✅ Sikeresen beszúrva a '{cat['name_hu']}' " f"kategória (ID: {tag.id})." ) await db.commit() # Ellenőrzés count_result = await db.execute( select(func.count(ExpertiseTag.id)) ) final_count = count_result.scalar() print(f"📊 Összes rekord az expertise_tags táblában: {final_count}") # Listázzuk a benzinkút kategóriákat print("\n📋 Benzinkút kategóriák:") result = await db.execute( text(""" SELECT id, key, name_hu, name_en, level, parent_id, path FROM marketplace.expertise_tags WHERE parent_id = :pid OR id = :pid ORDER BY level, id """), {"pid": FUEL_STATION_PARENT_ID}, ) for row in result: print(f" ID={row.id}, key={row.key}, name_hu={row.name_hu}, level={row.level}") except Exception as e: await db.rollback() logger.error(f"Hiba a seed-elés során: {e}") print(f"❌ Hiba: {e}") raise def main(): asyncio.run(seed_gas_station_categories()) if __name__ == "__main__": main()