garázs fejlesztés
This commit is contained in:
320
backend/app/scripts/seed_expertise_enterprise.py
Normal file
320
backend/app/scripts/seed_expertise_enterprise.py
Normal file
@@ -0,0 +1,320 @@
|
||||
"""
|
||||
Seed script: Enterprise Taxonomy - Pénzügy, Biztosítás és Hatósági kategóriák
|
||||
a marketplace.expertise_tags táblába.
|
||||
|
||||
Hierarchia:
|
||||
Level 1: Pénzügy és Biztosítás (Finance & Insurance)
|
||||
Level 2: Gépjármű biztosító (Vehicle Insurance)
|
||||
Level 2: Lízing és Finanszírozás (Leasing & Financing)
|
||||
Level 2: Bank és Hitelintézet (Bank & Credit Institution)
|
||||
|
||||
Level 1: Hatóságok és Közigazgatás (Authorities & Administration)
|
||||
Level 2: Önkormányzat (Municipality)
|
||||
Level 2: Állami Kincstár / Nemzeti Adóhatóság (State Treasury / Tax Authority)
|
||||
Level 2: Közlekedési Hatóság / Kormányablak (Transport Authority)
|
||||
Level 2: Útdíj / Autópálya Kezelő (Toll & Highway Operator)
|
||||
|
||||
Idempotens - ON CONFLICT DO NOTHING miatt többször is futtatható.
|
||||
|
||||
Futtatás: docker exec sf_api python3 /app/backend/app/scripts/seed_expertise_enterprise.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__)
|
||||
|
||||
# ── Enterprise Taxonomy Definitions ──
|
||||
# Level 1: Pénzügy és Biztosítás (Finance & Insurance)
|
||||
FINANCE_INSURANCE = {
|
||||
"key": "penzugy_es_biztositas",
|
||||
"name_i18n": {
|
||||
"hu": "Pénzügy és Biztosítás",
|
||||
"en": "Finance & Insurance",
|
||||
},
|
||||
"name_hu": "Pénzügy és Biztosítás",
|
||||
"name_en": "Finance & Insurance",
|
||||
"category": "financial",
|
||||
"level": 1,
|
||||
"parent_id": None,
|
||||
"path": "penzugy_es_biztositas",
|
||||
"search_keywords": [
|
||||
"pénzügy", "biztosítás", "finance", "insurance",
|
||||
"bank", "lízing", "hitel", "kölcsön",
|
||||
],
|
||||
"description": "Pénzügyi szolgáltatások, biztosítások, banki és lízing szolgáltatások",
|
||||
}
|
||||
|
||||
# Level 2 children of Pénzügy és Biztosítás
|
||||
FINANCE_CHILDREN = [
|
||||
{
|
||||
"key": "gepjarmu_biztosito",
|
||||
"name_i18n": {
|
||||
"hu": "Gépjármű biztosító",
|
||||
"en": "Vehicle Insurance",
|
||||
},
|
||||
"name_hu": "Gépjármű biztosító",
|
||||
"name_en": "Vehicle Insurance",
|
||||
"category": "financial",
|
||||
"level": 2,
|
||||
"search_keywords": [
|
||||
"biztosító", "biztosítás", "insurance", "kgfb",
|
||||
"casco", "kötelező", "gépjármű biztosítás",
|
||||
],
|
||||
"description": "Gépjármű felelősségbiztosítás (KGFB), casco és egyéb járműbiztosítások",
|
||||
},
|
||||
{
|
||||
"key": "lizing_es_finanszirozas",
|
||||
"name_i18n": {
|
||||
"hu": "Lízing és Finanszírozás",
|
||||
"en": "Leasing & Financing",
|
||||
},
|
||||
"name_hu": "Lízing és Finanszírozás",
|
||||
"name_en": "Leasing & Financing",
|
||||
"category": "financial",
|
||||
"level": 2,
|
||||
"search_keywords": [
|
||||
"lízing", "finanszírozás", "leasing", "financing",
|
||||
"autólízing", "operatív lízing", "pénzügyi lízing",
|
||||
],
|
||||
"description": "Gépjármű lízing, operatív és pénzügyi lízing, járműfinanszírozás",
|
||||
},
|
||||
{
|
||||
"key": "bank_es_hitelintezet",
|
||||
"name_i18n": {
|
||||
"hu": "Bank és Hitelintézet",
|
||||
"en": "Bank & Credit Institution",
|
||||
},
|
||||
"name_hu": "Bank és Hitelintézet",
|
||||
"name_en": "Bank & Credit Institution",
|
||||
"category": "financial",
|
||||
"level": 2,
|
||||
"search_keywords": [
|
||||
"bank", "hitelintézet", "banking", "credit",
|
||||
"számla", "hitel", "kölcsön", "folyószámla",
|
||||
],
|
||||
"description": "Banki szolgáltatások, hitelintézetek, számlavezetés és hitelezés",
|
||||
},
|
||||
]
|
||||
|
||||
# Level 1: Hatóságok és Közigazgatás (Authorities & Administration)
|
||||
AUTHORITIES = {
|
||||
"key": "hatosagok_es_kozigazgatas",
|
||||
"name_i18n": {
|
||||
"hu": "Hatóságok és Közigazgatás",
|
||||
"en": "Authorities & Administration",
|
||||
},
|
||||
"name_hu": "Hatóságok és Közigazgatás",
|
||||
"name_en": "Authorities & Administration",
|
||||
"category": "government",
|
||||
"level": 1,
|
||||
"parent_id": None,
|
||||
"path": "hatosagok_es_kozigazgatas",
|
||||
"search_keywords": [
|
||||
"hatóság", "közigazgatás", "authority", "government",
|
||||
"önkormányzat", "adó", "kincstár", "ügyfélkapu",
|
||||
],
|
||||
"description": "Hatósági és közigazgatási szervek, önkormányzatok, adóhatóságok",
|
||||
}
|
||||
|
||||
# Level 2 children of Hatóságok és Közigazgatás
|
||||
AUTHORITY_CHILDREN = [
|
||||
{
|
||||
"key": "onkormanyzat",
|
||||
"name_i18n": {
|
||||
"hu": "Önkormányzat",
|
||||
"en": "Municipality",
|
||||
},
|
||||
"name_hu": "Önkormányzat",
|
||||
"name_en": "Municipality",
|
||||
"category": "government",
|
||||
"level": 2,
|
||||
"search_keywords": [
|
||||
"önkormányzat", "municipality", "polgármesteri hivatal",
|
||||
"helyi adó", "gépjárműadó", "iparűzési adó",
|
||||
],
|
||||
"description": "Helyi önkormányzatok, polgármesteri hivatalok, helyi adóhatóságok",
|
||||
},
|
||||
{
|
||||
"key": "allami_kincstar_nav",
|
||||
"name_i18n": {
|
||||
"hu": "Állami Kincstár / Nemzeti Adóhatóság",
|
||||
"en": "State Treasury / Tax Authority",
|
||||
},
|
||||
"name_hu": "Állami Kincstár / Nemzeti Adóhatóság",
|
||||
"name_en": "State Treasury / Tax Authority",
|
||||
"category": "government",
|
||||
"level": 2,
|
||||
"search_keywords": [
|
||||
"adóhatóság", "nav", "kincstár", "treasury",
|
||||
"adó", "tax", "államkincstár", "magyar államkincstár",
|
||||
],
|
||||
"description": "Nemzeti Adó- és Vámhivatal (NAV), Magyar Államkincstár, központi adóhatóság",
|
||||
},
|
||||
{
|
||||
"key": "kozlekedesi_hatosag",
|
||||
"name_i18n": {
|
||||
"hu": "Közlekedési Hatóság / Kormányablak",
|
||||
"en": "Transport Authority",
|
||||
},
|
||||
"name_hu": "Közlekedési Hatóság / Kormányablak",
|
||||
"name_en": "Transport Authority",
|
||||
"category": "government",
|
||||
"level": 2,
|
||||
"search_keywords": [
|
||||
"közlekedési hatóság", "kormányablak", "transport authority",
|
||||
"ügyfélkapu", "okmányiroda", "gépjármű ügyintézés",
|
||||
"forgalmi engedély", "törzskönyv",
|
||||
],
|
||||
"description": "Közlekedési hatóságok, kormányablakok, okmányirodák, gépjármű ügyintézés",
|
||||
},
|
||||
{
|
||||
"key": "utdij_autopalya_kezelo",
|
||||
"name_i18n": {
|
||||
"hu": "Útdíj / Autópálya Kezelő",
|
||||
"en": "Toll & Highway Operator",
|
||||
},
|
||||
"name_hu": "Útdíj / Autópálya Kezelő",
|
||||
"name_en": "Toll & Highway Operator",
|
||||
"category": "government",
|
||||
"level": 2,
|
||||
"search_keywords": [
|
||||
"útdíj", "autópálya", "toll", "highway",
|
||||
"matrica", "e-matrica", "hu-go", "nemzeti útdíj",
|
||||
"autópálya matrica", "úthasználat",
|
||||
],
|
||||
"description": "Autópálya kezelők, útdíj fizetési rendszerek, e-matrica szolgáltatók",
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
async def seed_enterprise_taxonomy():
|
||||
"""Beszúrja a Pénzügy és Hatóság kategóriákat a marketplace.expertise_tags táblába."""
|
||||
async with AsyncSessionLocal() as db:
|
||||
try:
|
||||
inserted = 0
|
||||
|
||||
# ── Helper: insert a single tag ──
|
||||
async def insert_tag(tag_data: dict, parent_path: str = None) -> int | None:
|
||||
nonlocal inserted
|
||||
# Check if already exists
|
||||
stmt = select(ExpertiseTag).where(
|
||||
ExpertiseTag.key == tag_data["key"]
|
||||
)
|
||||
result = await db.execute(stmt)
|
||||
existing = result.scalar_one_or_none()
|
||||
|
||||
if existing:
|
||||
logger.info(
|
||||
f"A '{tag_data['name_hu']}' kategória "
|
||||
f"már létezik (ID: {existing.id}). Kihagyva."
|
||||
)
|
||||
print(
|
||||
f" ⏭️ '{tag_data['name_hu']}' már létezik (ID: {existing.id})"
|
||||
)
|
||||
return existing.id
|
||||
|
||||
# Build path
|
||||
path = tag_data.get("path")
|
||||
if not path and parent_path:
|
||||
path = f"{parent_path}/{tag_data['key']}"
|
||||
elif not path:
|
||||
path = tag_data["key"]
|
||||
|
||||
tag = ExpertiseTag(
|
||||
key=tag_data["key"],
|
||||
name_i18n=tag_data.get("name_i18n", {
|
||||
"hu": tag_data["name_hu"],
|
||||
"en": tag_data["name_en"],
|
||||
}),
|
||||
name_hu=tag_data["name_hu"],
|
||||
name_en=tag_data["name_en"],
|
||||
category=tag_data.get("category", "other"),
|
||||
level=tag_data["level"],
|
||||
parent_id=tag_data.get("parent_id"),
|
||||
path=path,
|
||||
search_keywords=tag_data.get("search_keywords", []),
|
||||
description=tag_data.get("description", ""),
|
||||
is_official=True,
|
||||
discovery_points=10,
|
||||
usage_count=0,
|
||||
)
|
||||
db.add(tag)
|
||||
await db.flush()
|
||||
await db.refresh(tag)
|
||||
inserted += 1
|
||||
print(f" ✅ '{tag_data['name_hu']}' beszúrva (ID: {tag.id})")
|
||||
return tag.id
|
||||
|
||||
# ── 1. Pénzügy és Biztosítás (Level 1) ──
|
||||
print("\n📋 Pénzügy és Biztosítás hierarchia:")
|
||||
finance_id = await insert_tag(FINANCE_INSURANCE)
|
||||
if finance_id:
|
||||
# Insert children with parent_id set
|
||||
for child in FINANCE_CHILDREN:
|
||||
child["parent_id"] = finance_id
|
||||
child["path"] = f"{FINANCE_INSURANCE['path']}/{child['key']}"
|
||||
await insert_tag(child)
|
||||
|
||||
# ── 2. Hatóságok és Közigazgatás (Level 1) ──
|
||||
print("\n📋 Hatóságok és Közigazgatás hierarchia:")
|
||||
auth_id = await insert_tag(AUTHORITIES)
|
||||
if auth_id:
|
||||
for child in AUTHORITY_CHILDREN:
|
||||
child["parent_id"] = auth_id
|
||||
child["path"] = f"{AUTHORITIES['path']}/{child['key']}"
|
||||
await insert_tag(child)
|
||||
|
||||
await db.commit()
|
||||
|
||||
# ── Final verification ──
|
||||
result = await db.execute(
|
||||
select(func.count(ExpertiseTag.id))
|
||||
)
|
||||
final_count = result.scalar()
|
||||
print(f"\n📊 Összes rekord az expertise_tags táblában: {final_count}")
|
||||
|
||||
# List the new enterprise tags
|
||||
print("\n📋 Új Enterprise kategóriák:")
|
||||
result = await db.execute(
|
||||
text("""
|
||||
SELECT id, key, name_hu, name_en, level, parent_id, path
|
||||
FROM marketplace.expertise_tags
|
||||
WHERE key IN (
|
||||
'penzugy_es_biztositas',
|
||||
'gepjarmu_biztosito',
|
||||
'lizing_es_finanszirozas',
|
||||
'bank_es_hitelintezet',
|
||||
'hatosagok_es_kozigazgatas',
|
||||
'onkormanyzat',
|
||||
'allami_kincstar_nav',
|
||||
'kozlekedesi_hatosag',
|
||||
'utdij_autopalya_kezelo'
|
||||
)
|
||||
ORDER BY level, id
|
||||
""")
|
||||
)
|
||||
for row in result:
|
||||
indent = " " * row.level
|
||||
print(
|
||||
f"{indent}ID={row.id}, key={row.key}, "
|
||||
f"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():
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
asyncio.run(seed_enterprise_taxonomy())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user