126 lines
4.3 KiB
Python
126 lines
4.3 KiB
Python
"""
|
|
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()
|