""" Seed script: Feltölti a marketplace.expertise_tags táblát a teljes 4-szintű autóipari taxonómiával (Master Taxonomy). Idempotens: Törli a meglévő is_official=True rekordokat, de MEGHAGYJA a felhasználók által létrehozott (is_official=False) címkéket. Architektúra: Level 0: Járműtípus (Vehicle Type) Level 1: Iparág/Főcsoport (Industry) Level 2: Szakma (Profession) Level 3: Specifikus feladat/címke (Specific Tag) Futtatás: docker exec sf_api python3 /app/backend/scripts/seed_expertise_taxonomy.py """ import asyncio import logging from sqlalchemy import select, func, delete from app.db.session import AsyncSessionLocal from app.models.marketplace.service import ExpertiseTag logger = logging.getLogger(__name__) # ────────────────────────────────────────────── # TELJES 4-SZINTŰ TAXONÓMIA SZÓTÁR # ────────────────────────────────────────────── # Formátum: # "key": { "name_hu", "name_en", "category", "search_keywords", "description", # "children": { ... } } # A szintek: 0=Járműtípus, 1=Iparág, 2=Szakma, 3=Specifikus feladat # ────────────────────────────────────────────── # UNIVERZÁLIS (JÁRMŰFÜGGETLEN) LEVEL 1 KATEGÓRIÁK # ────────────────────────────────────────────── # Ezek a kategóriák nem tartoznak egyetlen járműtípushoz sem (parent_id=None). # A frontend "Univerzális Szolgáltatások" blokkban jelennek meg. # Példák: Benzinkút, Étterem, Szállás UNIVERSAL_CATEGORIES = { "uzemanyag_toltoallomas": { "name_hu": "Üzemanyag és Töltőállomás", "name_en": "Fuel and Charging Station", "category": "fuel_station", "search_keywords": ["benzin", "dízel", "üzemanyag", "töltőállomás", "elektromos töltés", "fuel", "charging", "gas station"], "description": "Üzemanyagtöltő állomások és elektromos jármű töltőállomások", "children": { "benzinkut": { "name_hu": "Benzinkút", "name_en": "Gas Station", "category": "fuel_station", "search_keywords": ["benzin", "dízel", "üzemanyag", "benzinkút", "töltőállomás", "gas station", "fuel", "petrol"], "description": "Hagyományos üzemanyagtöltő állomások benzinnel, dízel üzemanyaggal", }, "elektromos_toltoallomas": { "name_hu": "Elektromos Töltőállomás", "name_en": "EV Charging Station", "category": "ev_charging", "search_keywords": ["elektromos töltés", "töltőállomás", "EV charging", "electric car charging", "elektromos autó"], "description": "Elektromos járművek töltőállomásai", }, }, }, "etel_ital": { "name_hu": "Étel és Ital", "name_en": "Food and Drink", "category": "food_drink", "search_keywords": ["étterem", "büfé", "kávézó", "gyorsétterem", "vendéglő", "restaurant", "cafe", "food"], "description": "Étterem, büfé, kávézó és egyéb vendéglátó egységek", "children": { "etterem": { "name_hu": "Étterem", "name_en": "Restaurant", "category": "restaurant", "search_keywords": ["étterem", "vendéglő", "restaurant", "fine dining", "étkezés"], "description": "Étterem és vendéglátó egységek", }, "gyorsetterem_bufe": { "name_hu": "Gyorsétterem / Büfé", "name_en": "Fast Food / Cafeteria", "category": "fast_food", "search_keywords": ["gyorsétterem", "büfé", "kávézó", "fast food", "cafe", "snack"], "description": "Gyorséttermek, büfék és kávézók", }, }, }, "szallas": { "name_hu": "Szállás", "name_en": "Accommodation", "category": "accommodation", "search_keywords": ["szállás", "motel", "hotel", "panzió", "vendégház", "accommodation", "hotel", "motel"], "description": "Szálláshelyek, motelek, hotelek és panziók", "children": { "hotel": { "name_hu": "Hotel", "name_en": "Hotel", "category": "hotel", "search_keywords": ["hotel", "szálloda", "accommodation", "hotel"], "description": "Hotelek és szállodák", }, "motel_panzio": { "name_hu": "Motel / Panzió", "name_en": "Motel / Guesthouse", "category": "motel", "search_keywords": ["motel", "panzió", "vendégház", "guesthouse", "motel"], "description": "Motelek, panziók és vendégházak", }, }, }, "orzes_parkolas": { "name_hu": "Őrzés és Parkolás", "name_en": "Security and Parking", "category": "parking", "search_keywords": ["parkoló", "őrzött parkoló", "garázs", "parking", "garage"], "description": "Őrzött parkolók, garázsok és parkolási szolgáltatások", "children": { "uni_orzott_parkolo": { "name_hu": "Őrzött Parkoló", "name_en": "Secured Parking", "category": "secured_parking", "search_keywords": ["őrzött parkoló", "parkoló", "secured parking", "parking lot"], "description": "Őrzött parkolók és parkolóházak", }, "uni_garazs": { "name_hu": "Garázs", "name_en": "Garage", "category": "garage", "search_keywords": ["garázs", "garage", "tároló", "storage"], "description": "Garázsok és járműtárolók", }, }, }, } # Formátum: # "key": { "name_hu", "name_en", "category", "search_keywords", "description", # "children": { ... } } # A szintek: 0=Járműtípus, 1=Iparág, 2=Szakma, 3=Specifikus feladat TAXONOMY = { # ════════════════════════════════════════════ # SZEMÉLYGÉPJÁRMŰ (Level 0) # ════════════════════════════════════════════ "szemelygepjarmu": { "name_hu": "Személygépjármű", "name_en": "Passenger Car", "category": "vehicle_type", "search_keywords": ["autó", "car", "személyautó", "passenger car", "személygépjármű"], "description": "Személygépjárművekhez kapcsolódó szolgáltatások", "children": { # ─── Karbantartás, Szerviz és Javítás (Level 1) ─── "karbantartas_es_javitas": { "name_hu": "Karbantartás, Szerviz és Javítás", "name_en": "Maintenance, Service and Repair", "category": "vehicle_service", "search_keywords": ["karbantartás", "szerviz", "javítás", "maintenance", "repair"], "description": "Gépjárművek karbantartása, szervizelése és javítása", "children": { "autoszerelo": { "name_hu": "Autószerelő", "name_en": "Car Mechanic", "category": "mechanic", "search_keywords": ["szerelő", "autószerelő", "mechanic", "garage"], "description": "Személygépjárművek mechanikai javítása, karbantartása", "children": { "motorolaj_csere": { "name_hu": "Motorolaj csere", "name_en": "Oil Change", "category": "mechanic", "search_keywords": ["olajcsere", "motorolaj", "olaj", "oil change"], "description": "Motorolaj és olajszűrő cseréje" }, "vezerles_csere": { "name_hu": "Vezérlés csere", "name_en": "Timing Belt Replacement", "category": "mechanic", "search_keywords": ["vezérlés", "vezérműszíj", "timing belt", "lánc"], "description": "Vezérműszíj vagy vezérlőlánc cseréje" }, "fekbetet_csere": { "name_hu": "Fékbetét csere", "name_en": "Brake Pad Replacement", "category": "mechanic", "search_keywords": ["fék", "fékbetét", "brake", "fékpofa"], "description": "Fékbetétek és fékpofák cseréje" }, "kuplung_csere": { "name_hu": "Kuplung csere", "name_en": "Clutch Replacement", "category": "mechanic", "search_keywords": ["kuplung", "clutch", "kuplungcsere"], "description": "Kuplung szett cseréje" }, "turbo_felujitas": { "name_hu": "Turbó felújítás", "name_en": "Turbo Repair", "category": "mechanic", "search_keywords": ["turbó", "turbo", "feltöltő", "turbo repair"], "description": "Turbófeltöltők javítása és felújítása" }, "dpf_tisztitas": { "name_hu": "DPF tisztítás", "name_en": "DPF Cleaning", "category": "mechanic", "search_keywords": ["dpf", "részecskeszűrő", "diesel particulate filter"], "description": "Dízel részecskeszűrő tisztítása és regenerálása" }, "motordiagnosztika": { "name_hu": "Motordiagnosztika", "name_en": "Engine Diagnostics", "category": "mechanic", "search_keywords": ["diagnosztika", "motor", "hibakód", "diagnostics"], "description": "Motorhibák diagnosztizálása számítógépes eszközökkel" }, "klimatoltes": { "name_hu": "Klímatöltés", "name_en": "AC Service", "category": "mechanic", "search_keywords": ["klíma", "klímatöltés", "ac", "air conditioning"], "description": "Légkondicionáló rendszer töltése és karbantartása" }, "ozonos_klimatisztitas": { "name_hu": "Ózonos klímatisztítás", "name_en": "Ozone AC Cleaning", "category": "mechanic", "search_keywords": ["ózon", "klímatisztítás", "ozone", "ac cleaning"], "description": "Klímarendszer ózonos fertőtlenítése" }, "kipufogo_javitas": { "name_hu": "Kipufogó javítás", "name_en": "Exhaust Repair", "category": "mechanic", "search_keywords": ["kipufogó", "exhaust", "dob", "katalizátor"], "description": "Kipufogórendszer javítása és hegesztése" }, "lengescillapito_csere": { "name_hu": "Lengéscsillapító csere", "name_en": "Shock Absorber Replacement", "category": "mechanic", "search_keywords": ["lengéscsillapító", "shock", "felfüggesztés", "suspension"], "description": "Lengéscsillapítók és felfüggesztés elemek cseréje" } } }, "autovillamossag": { "name_hu": "Autóvillamosság", "name_en": "Auto Electrician", "category": "electrical", "search_keywords": ["villamosság", "elektromos", "auto electrician", "elektronika"], "description": "Gépjármű elektromos rendszereinek javítása", "children": { "akkumulator_csere": { "name_hu": "Akkumulátor csere", "name_en": "Battery Replacement", "category": "electrical", "search_keywords": ["akkumulátor", "battery", "akku"], "description": "Indítóakkumulátor cseréje" }, "generator_felujitas": { "name_hu": "Generátor felújítás", "name_en": "Alternator Repair", "category": "electrical", "search_keywords": ["generátor", "alternator", "váltóáramú generátor"], "description": "Generátor javítása és felújítása" }, "onindito_javitas": { "name_hu": "Önindító javítás", "name_en": "Starter Motor Repair", "category": "electrical", "search_keywords": ["önindító", "starter", "indítómotor"], "description": "Önindító motor javítása" }, "hibakod_olvasas": { "name_hu": "Hibakód olvasás", "name_en": "DTC Reading", "category": "electrical", "search_keywords": ["hibakód", "dtc", "diagnosztika", "error code"], "description": "Fedélzeti diagnosztikai hibakódok kiolvasása" }, "immobiliser_programozas": { "name_hu": "Immobiliser programozás", "name_en": "Immobiliser Programming", "category": "electrical", "search_keywords": ["immobiliser", "immobilizer", "kulcs", "key programming"], "description": "Indításgátló rendszer programozása és kulcsmásolás" }, "tolatoradar_beszereles": { "name_hu": "Tolatóradar beszerelés", "name_en": "Parking Sensor Installation", "category": "electrical", "search_keywords": ["tolatóradar", "parking sensor", "parktronic"], "description": "Tolatóradar rendszerek beszerelése" } } }, "gumiszerviz": { "name_hu": "Gumiszerviz", "name_en": "Tire Service", "category": "tire", "search_keywords": ["gumi", "gumis", "tire", "tyre", "abroncs", "kerék"], "description": "Gumiabroncsok cseréje, javítása", "children": { "gumiabroncs_csere": { "name_hu": "Gumiabroncs csere", "name_en": "Tire Change", "category": "tire", "search_keywords": ["gumicsere", "tire change", "abroncs csere"], "description": "Szezonális gumiabroncs csere" }, "centrirozas": { "name_hu": "Centrírozás", "name_en": "Wheel Balancing", "category": "tire", "search_keywords": ["centrírozás", "balancing", "kerék kiegyensúlyozás"], "description": "Kerekek centrírozása és kiegyensúlyozása" }, "defektjavitas": { "name_hu": "Defektjavítás", "name_en": "Puncture Repair", "category": "tire", "search_keywords": ["defekt", "puncture", "gumijavítás"], "description": "Gumiabroncs defekt javítása" }, "alufelni_gorgozes": { "name_hu": "Alufelni görgőzés", "name_en": "Alloy Wheel Straightening", "category": "tire", "search_keywords": ["alufelni", "görgőzés", "alloy wheel", "felni javítás"], "description": "Alumínium felnik görgőzése és javítása" }, "tpms_szenzor_tanitas": { "name_hu": "TPMS szenzor tanítás", "name_en": "TPMS Sensor Programming", "category": "tire", "search_keywords": ["tpms", "szenzor", "guminyomás", "tire pressure"], "description": "Guminyomás monitor rendszer szenzorainak tanítása" } } }, "karosszeria_javitas": { "name_hu": "Karosszéria javítás", "name_en": "Body Repair", "category": "body", "search_keywords": ["karosszéria", "lakatos", "bodyshop", "kasztni"], "description": "Karosszéria javítás és lakatolás", "children": { "horpadasjavitas_pdr": { "name_hu": "Horpadásjavítás (PDR)", "name_en": "Paintless Dent Repair (PDR)", "category": "body", "search_keywords": ["horpadás", "pdr", "dent repair", "horpadásjavítás"], "description": "Fényezés nélküli horpadásjavítás" }, "jegkar_javitas": { "name_hu": "Jégkár javítás", "name_en": "Hail Damage Repair", "category": "body", "search_keywords": ["jégkár", "hail", "jégeső", "hail damage"], "description": "Jégeső okozta károk javítása" }, "alvazvedelem": { "name_hu": "Alvázvédelem", "name_en": "Underbody Protection", "category": "body", "search_keywords": ["alváz", "alvázvédelem", "underbody", "alvázkezelés"], "description": "Alvázvédelem és alvázkezelés" }, "szelvedo_csere": { "name_hu": "Szélvédő csere", "name_en": "Windshield Replacement", "category": "body", "search_keywords": ["szélvédő", "windshield", "ablak", "üveg"], "description": "Szélvédő és autóüveg csere" }, "muanyag_lokharito_hegesztes": { "name_hu": "Műanyag lökhárító hegesztés", "name_en": "Plastic Bumper Welding", "category": "body", "search_keywords": ["lökhárító", "bumper", "műanyag hegesztés", "bumper repair"], "description": "Műanyag lökhárítók hegesztése és javítása" } } }, "fenyezes": { "name_hu": "Fényezés", "name_en": "Painting", "category": "paint", "search_keywords": ["fényező", "fényezés", "painter", "lakkozás"], "description": "Gépjármű fényezés és lakkozás", "children": { "elemfenyezes": { "name_hu": "Elemfényezés", "name_en": "Panel Painting", "category": "paint", "search_keywords": ["elemfényezés", "panel painting", "részfényezés"], "description": "Egyedi karosszériaelemek fényezése" }, "teljes_polirozas": { "name_hu": "Teljes polírozás", "name_en": "Full Polishing", "category": "paint", "search_keywords": ["polírozás", "polishing", "fényezés helyreállítás"], "description": "Teljes gépjármű polírozás és fényezés helyreállítás" }, "fényszóró_polírozás": { "name_hu": "Fényszóró polírozás", "name_en": "Headlight Polishing", "category": "paint", "search_keywords": ["fényszóró", "headlight", "polírozás", "homályosítás"], "description": "Műanyag fényszórók polírozása és átlátszóság helyreállítás" } } }, "sebessegvalto_specialista": { "name_hu": "Sebességváltó specialista", "name_en": "Transmission Specialist", "category": "transmission", "search_keywords": ["váltó", "sebességváltó", "transmission", "dsg"], "description": "Sebességváltók javítása és karbantartása", "children": { "automata_valto_olajcsere": { "name_hu": "Automata váltó olajcsere", "name_en": "Automatic Transmission Fluid Change", "category": "transmission", "search_keywords": ["automata váltó", "atf", "olajcsere", "transmission fluid"], "description": "Automata sebességváltó olajcseréje" }, "kettostomegu_lendkerék_csere": { "name_hu": "Kettőstömegű lendkerék csere", "name_en": "Dual Mass Flywheel Replacement", "category": "transmission", "search_keywords": ["dmf", "lendkerék", "dual mass", "kettőstömegű"], "description": "Kettőstömegű lendkerék (DMF) cseréje" }, "dsg_javitas": { "name_hu": "DSG javítás", "name_en": "DSG Repair", "category": "transmission", "search_keywords": ["dsg", "dsg javítás", "dsg váltó", "direct shift gearbox"], "description": "DSG sebességváltók javítása és szervize" } } } } }, # ─── Járműmosó és Kozmetika (Level 1) ─── "jarmumoso_es_kozmetika": { "name_hu": "Járműmosó és Kozmetika", "name_en": "Car Wash and Detailing", "category": "detailing", "search_keywords": ["mosó", "kozmetika", "detailing", "mosás", "takarítás"], "description": "Gépjárműmosás, takarítás és kozmetikai szolgáltatások", "children": { "kezi_autamoso": { "name_hu": "Kézi Autómosó", "name_en": "Hand Car Wash", "category": "detailing", "search_keywords": ["kézi mosás", "hand wash", "autómosó"], "description": "Kézi erővel végzett autómosás és ápolás", "children": { "kulso_mosas": { "name_hu": "Külső mosás", "name_en": "Exterior Wash", "category": "detailing", "search_keywords": ["külső mosás", "exterior wash", "autómosás"], "description": "Gépjármű külső mosása" }, "belso_takaritas": { "name_hu": "Belső takarítás", "name_en": "Interior Cleaning", "category": "detailing", "search_keywords": ["belső", "interior", "takarítás", "porszívózás"], "description": "Gépjármű belső terének takarítása" }, "karpi_tisztitas": { "name_hu": "Kárpittisztítás", "name_en": "Upholstery Cleaning", "category": "detailing", "search_keywords": ["kárpit", "upholstery", "ülés", "seat cleaning"], "description": "Ülések és kárpitok mélytisztítása" }, "borapolas": { "name_hu": "Bőrápolás", "name_en": "Leather Care", "category": "detailing", "search_keywords": ["bőr", "leather", "bőrápolás", "bőrtisztítás"], "description": "Bőrülések ápolása és tisztítása" }, "keramia_bevonat": { "name_hu": "Kerámia bevonat", "name_en": "Ceramic Coating", "category": "detailing", "search_keywords": ["kerámia", "ceramic coating", "bevonat", "nano"], "description": "Kerámia nano-bevonat felvitele a karosszériára" } } }, "onkiszolgalo_moso": { "name_hu": "Önkiszolgáló mosó", "name_en": "Self-Service Car Wash", "category": "detailing", "search_keywords": ["önkiszolgáló", "self-service", "mosó", "automata mosó"], "description": "Önkiszolgáló autómosó állomások" }, "gepi_kefes_moso": { "name_hu": "Gépi / Kefés mosó", "name_en": "Automatic Car Wash", "category": "detailing", "search_keywords": ["gépi mosó", "kefés mosó", "automata", "automatic wash"], "description": "Automata kefés gépjárműmosók" } } }, # ─── Mentés, Szállítás és Asszisztencia (Level 1) ─── "mentes_szallitas_asszisztencia": { "name_hu": "Mentés, Szállítás és Asszisztencia", "name_en": "Towing, Transport and Assistance", "category": "roadside", "search_keywords": ["mentés", "szállítás", "asszisztencia", "tow", "roadside"], "description": "Autómentés, szállítás és úti segítségnyújtás", "children": { "automento": { "name_hu": "Autómentő", "name_en": "Tow Truck Service", "category": "roadside", "search_keywords": ["mentő", "autómentő", "tow", "roadside assistance"], "description": "Autómentés és útszéli segítségnyújtás", "children": { "darus_mentes": { "name_hu": "Darus mentés", "name_en": "Crane Recovery", "category": "roadside", "search_keywords": ["daru", "crane", "mentés", "kiemelés"], "description": "Darus gépjármű kiemelés és mentés" }, "melygarazsbol_mentes": { "name_hu": "Mélygarázsból mentés", "name_en": "Underground Garage Recovery", "category": "roadside", "search_keywords": ["mélygarázs", "underground", "garázs", "mentés"], "description": "Mélygarázsokból történő gépjármű mentés" }, "felretankolas_szivas": { "name_hu": "Félretankolás szívás", "name_en": "Wrong Fuel Drain", "category": "roadside", "search_keywords": ["félretankolás", "rossz üzemanyag", "szívás", "wrong fuel"], "description": "Rossz üzemanyaggal tankolt jármű üzemanyagának eltávolítása" } } }, "mobil_gumiszerviz": { "name_hu": "Mobil Gumiszerviz", "name_en": "Mobile Tire Service", "category": "roadside", "search_keywords": ["mobil gumis", "mobile tire", "helyszíni gumicsere"], "description": "Helyszíni gumiszerviz szolgáltatás" }, "autoszallitas_trelerek": { "name_hu": "Autószállítás / Tréler", "name_en": "Car Transport / Trailer", "category": "roadside", "search_keywords": ["szállítás", "tréler", "trailer", "autószállítás", "transport"], "description": "Gépjárművek szállítása trélerrel", "children": { "nemzetkozi_autoszallitas": { "name_hu": "Nemzetközi autószállítás", "name_en": "International Car Transport", "category": "roadside", "search_keywords": ["nemzetközi", "international", "export", "import", "szállítás"], "description": "Nemzetközi gépjármű szállítás" } } } } }, # ─── Hatósági Vizsgáztatás (Level 1) ─── "hatosagi_vizsgaztatas": { "name_hu": "Hatósági Vizsgáztatás", "name_en": "Official Inspection", "category": "inspection", "search_keywords": ["vizsga", "műszaki", "inspection", "hatósági", "vizsgáztatás"], "description": "Hatósági gépjármű vizsgáztatás", "children": { "muszaki_vizsgaallomas": { "name_hu": "Műszaki vizsgaállomás", "name_en": "MOT Inspection Station", "category": "inspection", "search_keywords": ["műszaki vizsga", "MOT", "inspection", "vizsgaállomás"], "description": "Időszakos műszaki vizsgáztatás" }, "eredetisegvizsgalat": { "name_hu": "Eredetiségvizsgálat", "name_en": "Vehicle Authenticity Check", "category": "inspection", "search_keywords": ["eredetiség", "authenticity", "kilométer", "származás"], "description": "Gépjármű eredetiségének vizsgálata" } } }, # ─── Út menti / Kényelmi Szolgáltatások (Level 1) ─── "ut_menti_kenyelmi_szolgaltatasok": { "name_hu": "Út menti / Kényelmi Szolgáltatások", "name_en": "Roadside Convenience Services", "category": "convenience", "search_keywords": ["étterem", "szállás", "parkoló", "motel", "convenience"], "description": "Út menti kényelmi és vendéglátó szolgáltatások", "children": { "etterem_bufe": { "name_hu": "Étterem / Büfé", "name_en": "Restaurant / Snack Bar", "category": "convenience", "search_keywords": ["étterem", "büfé", "restaurant", "snack", "vendéglátás"], "description": "Út menti éttermek és büfék" }, "szallashely_motel": { "name_hu": "Szálláshely / Motel", "name_en": "Accommodation / Motel", "category": "convenience", "search_keywords": ["szállás", "motel", "hotel", "accommodation", "pihenő"], "description": "Út menti szálláshelyek és motelek" }, "orzott_parkolo": { "name_hu": "Őrzött parkoló", "name_en": "Secured Parking", "category": "convenience", "search_keywords": ["parkoló", "parking", "őrzött", "garázs", "secured"], "description": "Őrzött gépjármű parkolók" } } } } }, # ════════════════════════════════════════════ # MOTORKERÉKPÁR (Level 0) # ════════════════════════════════════════════ "motorkerekpar": { "name_hu": "Motorkerékpár", "name_en": "Motorcycle", "category": "vehicle_type", "search_keywords": ["motor", "motorcycle", "robogó", "scooter", "motorkerékpár"], "description": "Motorkerékpárokhoz kapcsolódó szolgáltatások", "children": { "motor_karbantartas_es_javitas": { "name_hu": "Karbantartás és Javítás", "name_en": "Maintenance and Repair", "category": "vehicle_service", "search_keywords": ["motor szerelés", "motor javítás", "motorcycle repair"], "description": "Motorkerékpárok karbantartása és javítása", "children": { "motor_szerelo": { "name_hu": "Motorkerékpár szerelő", "name_en": "Motorcycle Mechanic", "category": "mechanic", "search_keywords": ["motor szerelő", "motorcycle mechanic", "robogó szerelő"], "description": "Motorkerékpárok és robogók mechanikai javítása", "children": { "motor_olajcsere": { "name_hu": "Motor olajcsere", "name_en": "Motorcycle Oil Change", "category": "mechanic", "search_keywords": ["motor olaj", "motorcycle oil", "olajcsere"], "description": "Motorkerékpár motorolaj cseréje" }, "motor_lanc_csere": { "name_hu": "Lánc csere", "name_en": "Chain Replacement", "category": "mechanic", "search_keywords": ["lánc", "chain", "lánckészlet", "motor lánc"], "description": "Motorkerékpár lánc és lánckerekek cseréje" }, "motor_gumicsere": { "name_hu": "Motor gumicsere", "name_en": "Motorcycle Tire Change", "category": "tire", "search_keywords": ["motor gumi", "motorcycle tire", "abroncs"], "description": "Motorkerékpár gumiabroncsok cseréje" } } }, "motor_villamossag": { "name_hu": "Motor villamosság", "name_en": "Motorcycle Electrician", "category": "electrical", "search_keywords": ["motor elektromos", "motorcycle electrical", "akkumulátor"], "description": "Motorkerékpárok elektromos rendszereinek javítása" } } }, "motor_kiegeszitok": { "name_hu": "Kiegészítők és Tuning", "name_en": "Accessories and Tuning", "category": "accessories", "search_keywords": ["motor kiegészítő", "tuning", "motorcycle accessories", "kipufogó"], "description": "Motorkerékpár kiegészítők és tuning szolgáltatások", "children": { "motor_kiegeszito_szereles": { "name_hu": "Kiegészítők beszerelése", "name_en": "Accessory Installation", "category": "accessories", "search_keywords": ["kiegészítő", "topcase", "oldaltáska", "accessory"], "description": "Motorkerékpár kiegészítők beszerelése" } } } } }, # ════════════════════════════════════════════ # KISHASZONJÁRMŰ (Level 0) # ════════════════════════════════════════════ "kishaszonjarmu": { "name_hu": "Kishaszonjármű", "name_en": "Light Commercial Vehicle (LCV)", "category": "vehicle_type", "search_keywords": ["kishaszon", "lcv", "furgon", "van", "kisteher", "pickup"], "description": "Kishaszonjárművekhez kapcsolódó szolgáltatások", "children": { "lcv_karbantartas": { "name_hu": "Karbantartás és Javítás", "name_en": "Maintenance and Repair", "category": "vehicle_service", "search_keywords": ["furgon szerelés", "lcv repair", "kisteher javítás"], "description": "Kishaszonjárművek karbantartása és javítása", "children": { "lcv_szerelo": { "name_hu": "Kishaszonjármű szerelő", "name_en": "LCV Mechanic", "category": "mechanic", "search_keywords": ["furgon szerelő", "lcv mechanic", "kisteher szerelő"], "description": "Furgonok és kisteher járművek mechanikai javítása" }, "lcv_gumiszerviz": { "name_hu": "LCV Gumiszerviz", "name_en": "LCV Tire Service", "category": "tire", "search_keywords": ["furgon gumi", "lcv tire", "kisteher gumi"], "description": "Kishaszonjármű gumiabroncsok cseréje és javítása" } } }, "lcv_moso": { "name_hu": "Nagyhaszonjármű mosó", "name_en": "LCV / Truck Wash", "category": "detailing", "search_keywords": ["furgon mosó", "lcv wash", "kisteher mosás", "nagy mosó"], "description": "Kishaszonjárművek és kisteher járművek mosása" } } }, # ════════════════════════════════════════════ # NAGYHASZONJÁRMŰ (KAMION) (Level 0) # ════════════════════════════════════════════ "nagyhaszonjarmu_kamion": { "name_hu": "Nagyhaszonjármű (Kamion)", "name_en": "Heavy Goods Vehicle (HGV / Truck)", "category": "vehicle_type", "search_keywords": ["kamion", "truck", "hgv", "teherautó", "nyerges", "nehéz"], "description": "Nagyhaszonjárművekhez és kamionokhoz kapcsolódó szolgáltatások", "children": { "kamion_karbantartas": { "name_hu": "Karbantartás és Javítás", "name_en": "Maintenance and Repair", "category": "vehicle_service", "search_keywords": ["kamion szerelés", "truck repair", "hgv maintenance"], "description": "Kamionok és nehézgépjárművek karbantartása és javítása", "children": { "kamion_szerelo": { "name_hu": "Kamionszerelő", "name_en": "Truck Mechanic", "category": "mechanic", "search_keywords": ["kamion szerelő", "truck mechanic", "hgv szerelő"], "description": "Kamionok mechanikai javítása és karbantartása" }, "kamion_diagnosztika": { "name_hu": "Kamion diagnosztika", "name_en": "Truck Diagnostics", "category": "mechanic", "search_keywords": ["kamion diagnosztika", "truck diagnostics", "hibakód"], "description": "Kamionok fedélzeti diagnosztikája" }, "kamion_fekrendszer": { "name_hu": "Fékrendszer szerviz", "name_en": "Brake System Service", "category": "mechanic", "search_keywords": ["kamion fék", "truck brake", "fékrendszer", "légfék"], "description": "Kamionok légfék rendszerének karbantartása" } } }, "kamion_gumiszerviz": { "name_hu": "Kamion Gumiszerviz", "name_en": "Truck Tire Service", "category": "tire", "search_keywords": ["kamion gumi", "truck tire", "hgv tire", "abroncs"], "description": "Kamion gumiabroncsok cseréje és javítása" }, "kamion_moso": { "name_hu": "Nagyhaszonjármű mosó", "name_en": "Truck Wash", "category": "detailing", "search_keywords": ["kamion mosó", "truck wash", "nagy mosó", "teherautó mosás"], "description": "Kamionok és nehézgépjárművek mosása" }, "tachograf_szerviz": { "name_hu": "Tachográf szerviz", "name_en": "Tachograph Service", "category": "inspection", "search_keywords": ["tachográf", "tachograph", "menetíró", "digitális tachográf"], "description": "Digitális és analóg tachográfok karbantartása és hitelesítése", "children": { "tachograf_kalibralas": { "name_hu": "Tachográf kalibrálás", "name_en": "Tachograph Calibration", "category": "inspection", "search_keywords": ["kalibrálás", "calibration", "tachográf hitelesítés"], "description": "Tachográf rendszerek időszakos kalibrálása" }, "tachograf_illesztes": { "name_hu": "Tachográf illesztés", "name_en": "Tachograph Fitting", "category": "inspection", "search_keywords": ["tachográf szerelés", "tachograph installation", "illesztés"], "description": "Tachográf készülékek beszerelése és cseréje" } } }, "kamion_szallitas": { "name_hu": "Kamionos szállítás", "name_en": "Truck Transport", "category": "roadside", "search_keywords": ["kamion szállítás", "truck transport", "fuvarozás", "teherszállítás"], "description": "Kamionos áru- és teherszállítási szolgáltatások" } } }, # ════════════════════════════════════════════ # MUNKAGÉP / TRAKTOR (Level 0) # ════════════════════════════════════════════ "munkagep_traktor": { "name_hu": "Munkagép / Traktor", "name_en": "Agricultural / Construction Machinery", "category": "vehicle_type", "search_keywords": ["traktor", "tractor", "munkagép", "mezőgazdasági", "építőipari"], "description": "Mezőgazdasági és építőipari munkagépek szolgáltatásai", "children": { "munkagep_karbantartas": { "name_hu": "Karbantartás és Javítás", "name_en": "Maintenance and Repair", "category": "vehicle_service", "search_keywords": ["traktor szerelés", "tractor repair", "munkagép javítás"], "description": "Mezőgazdasági és építőipari gépek karbantartása", "children": { "traktor_szerelo": { "name_hu": "Traktor szerelő", "name_en": "Tractor Mechanic", "category": "mechanic", "search_keywords": ["traktor szerelő", "tractor mechanic", "mezőgazdasági gép"], "description": "Traktorok és mezőgazdasági gépek javítása" }, "epitoipari_gep_szerelo": { "name_hu": "Építőipari gép szerelő", "name_en": "Construction Machinery Mechanic", "category": "mechanic", "search_keywords": ["építőipari gép", "construction", "kotró", "dózer"], "description": "Építőipari gépek (kotrók, dózerok) javítása" }, "hidraulika_szerviz": { "name_hu": "Hidraulika szerviz", "name_en": "Hydraulic Service", "category": "mechanic", "search_keywords": ["hidraulika", "hydraulic", "munkahenger", "tömítés"], "description": "Hidraulikus rendszerek javítása és karbantartása" } } } } }, # ════════════════════════════════════════════ # PÓTKOCSI / UTÁNFUTÓ (Level 0) # ════════════════════════════════════════════ "potkocsi_utanfuto": { "name_hu": "Pótkocsi / Utánfutó", "name_en": "Trailer", "category": "vehicle_type", "search_keywords": ["pótkocsi", "utánfutó", "trailer", "félpótkocsi"], "description": "Pótkocsikhoz és utánfutókhoz kapcsolódó szolgáltatások", "children": { "potkocsi_karbantartas": { "name_hu": "Karbantartás és Javítás", "name_en": "Maintenance and Repair", "category": "vehicle_service", "search_keywords": ["pótkocsi szerelés", "trailer repair", "utánfutó javítás"], "description": "Pótkocsik és utánfutók karbantartása", "children": { "potkocsi_szerelo": { "name_hu": "Pótkocsi szerelő", "name_en": "Trailer Mechanic", "category": "mechanic", "search_keywords": ["pótkocsi szerelő", "trailer mechanic", "utánfutó szerelő"], "description": "Pótkocsik és utánfutók mechanikai javítása" }, "potkocsi_fek_javitas": { "name_hu": "Pótkocsi fék javítás", "name_en": "Trailer Brake Repair", "category": "mechanic", "search_keywords": ["pótkocsi fék", "trailer brake", "utánfutó fék"], "description": "Pótkocsik fékrendszerének javítása" } } }, "potkocsi_vizsga": { "name_hu": "Pótkocsi vizsgáztatás", "name_en": "Trailer Inspection", "category": "inspection", "search_keywords": ["pótkocsi vizsga", "trailer inspection", "utánfutó műszaki"], "description": "Pótkocsik időszakos műszaki vizsgáztatása" } } }, # ════════════════════════════════════════════ # BUSZ (Level 0) # ════════════════════════════════════════════ "busz": { "name_hu": "Busz", "name_en": "Bus / Coach", "category": "vehicle_type", "search_keywords": ["busz", "bus", "coach", "autóbusz", "távolsági busz"], "description": "Buszokhoz és autóbuszokhoz kapcsolódó szolgáltatások", "children": { "busz_karbantartas": { "name_hu": "Karbantartás és Javítás", "name_en": "Maintenance and Repair", "category": "vehicle_service", "search_keywords": ["busz szerelés", "bus repair", "autóbusz javítás"], "description": "Buszok és autóbuszok karbantartása", "children": { "busz_szerelo": { "name_hu": "Buszszerelő", "name_en": "Bus Mechanic", "category": "mechanic", "search_keywords": ["busz szerelő", "bus mechanic", "autóbusz szerelő"], "description": "Buszok mechanikai javítása és karbantartása" }, "busz_diagnosztika": { "name_hu": "Busz diagnosztika", "name_en": "Bus Diagnostics", "category": "mechanic", "search_keywords": ["busz diagnosztika", "bus diagnostics", "fedélzeti rendszer"], "description": "Buszok fedélzeti rendszereinek diagnosztikája" } } }, "busz_takaritas": { "name_hu": "Busz takarítás", "name_en": "Bus Cleaning", "category": "detailing", "search_keywords": ["busz takarítás", "bus cleaning", "autóbusz mosás"], "description": "Buszok belső és külső takarítása" } } }, # ════════════════════════════════════════════ # LAKÓAUTÓ / LAKÓKOCSI (Level 0) # ════════════════════════════════════════════ "lakoauto_lakokocsi": { "name_hu": "Lakóautó / Lakókocsi", "name_en": "Motorhome / Caravan", "category": "vehicle_type", "search_keywords": ["lakóautó", "lakókocsi", "motorhome", "caravan", "camper"], "description": "Lakóautókhoz és lakókocsikhoz kapcsolódó szolgáltatások", "children": { "lakokocsi_karbantartas": { "name_hu": "Karbantartás és Javítás", "name_en": "Maintenance and Repair", "category": "vehicle_service", "search_keywords": ["lakóautó szerelés", "motorhome repair", "lakókocsi javítás"], "description": "Lakóautók és lakókocsik karbantartása", "children": { "lakoauto_szerelo": { "name_hu": "Lakóautó szerelő", "name_en": "Motorhome Mechanic", "category": "mechanic", "search_keywords": ["lakóautó szerelő", "motorhome mechanic", "camper szerelő"], "description": "Lakóautók gépészeti javítása" }, "lakokocsi_karosszeria": { "name_hu": "Lakókocsi karosszéria javítás", "name_en": "Caravan Body Repair", "category": "body", "search_keywords": ["lakókocsi javítás", "caravan repair", "lakóautó karosszéria"], "description": "Lakókocsik és lakóautók karosszéria javítása" } } }, "lakoauto_szerelveny": { "name_hu": "Lakóautó szerelvény szerviz", "name_en": "Motorhome Fitting Service", "category": "accessories", "search_keywords": ["szerelvény", "fitting", "lakóautó felszerelés", "camper átalakítás"], "description": "Lakóautók belső szerelvényeinek karbantartása" } } } } # ────────────────────────────────────────────── # SEED LOGIC # ────────────────────────────────────────────── async def _flatten_and_insert(db, parent_id: int | None, level: int, path_prefix: str, data: dict, parent_key: str | None): """ Rekurzívan bejárja a TAXONOMY szótárat, és beszúrja a rekordokat. Visszaadja a beszúrt rekordok számát. """ inserted = 0 for key, node in data.items(): # Path építése: root esetén csak a key, egyébként path_prefix/key if level == 0: path = key else: path = f"{path_prefix}/{key}" if path_prefix else key tag = ExpertiseTag( key=key, name_i18n={"hu": node["name_hu"], "en": node["name_en"]}, category=node.get("category", ""), search_keywords=node.get("search_keywords", []), is_official=True, level=level, parent_id=parent_id, path=path, discovery_points=10, usage_count=0, ) db.add(tag) inserted += 1 # Rekurzív gyermekek feldolgozása children = node.get("children", {}) if children: # Flush kell, hogy meglegyen az ID a parent_id-hoz await db.flush() child_inserted = await _flatten_and_insert( db=db, parent_id=tag.id, level=level + 1, path_prefix=path, data=children, parent_key=key, ) inserted += child_inserted return inserted async def seed_expertise_taxonomy(): """Feltölti az expertise_tags táblát a teljes 4-szintű taxonómiával.""" async with AsyncSessionLocal() as db: try: # 1. Meglévő hivatalos rekordok törlése (is_official=True) # A felhasználói (is_official=False) címkék MEGMARADNAK! print("🗑️ Meglévő hivatalos (is_official=True) rekordok törlése...") stmt_del = delete(ExpertiseTag).where(ExpertiseTag.is_official == True) result = await db.execute(stmt_del) deleted_count = result.rowcount print(f" Törölve: {deleted_count} rekord") await db.commit() # 2. Taxonómia beszúrása print("🌱 Taxonómia beszúrása...") total_inserted = await _flatten_and_insert( db=db, parent_id=None, level=0, path_prefix="", data=TAXONOMY, parent_key=None, ) await db.commit() print(f"✅ Sikeresen beszúrva {total_inserted} kategória.") # 3. Univerzális (járműfüggetlen) Level 1 kategóriák beszúrása print("🌱 Univerzális (járműfüggetlen) Level 1 kategóriák beszúrása...") universal_inserted = 0 for key, node in UNIVERSAL_CATEGORIES.items(): tag = ExpertiseTag( key=key, name_i18n={"hu": node["name_hu"], "en": node["name_en"]}, category=node.get("category", ""), search_keywords=node.get("search_keywords", []), is_official=True, level=1, parent_id=None, path=key, discovery_points=10, usage_count=0, ) db.add(tag) universal_inserted += 1 # Gyermekek (Level 2) rekurzív feldolgozása children = node.get("children", {}) if children: await db.flush() child_inserted = await _flatten_and_insert( db=db, parent_id=tag.id, level=2, path_prefix=key, data=children, parent_key=key, ) universal_inserted += child_inserted await db.commit() print(f"✅ Sikeresen beszúrva {universal_inserted} univerzális kategória (Level 1 + Level 2 gyermekek).") # 4. Ellenőrzés result = await db.execute(select(func.count(ExpertiseTag.id))) final_count = result.scalar() print(f"📊 Összes rekord az expertise_tags táblában: {final_count}") # 5. Statisztika szintenként for level in range(4): result = await db.execute( select(func.count(ExpertiseTag.id)).where( ExpertiseTag.level == level, ExpertiseTag.is_official == True, ) ) count = result.scalar() print(f" Level {level}: {count} rekord") except Exception as e: await db.rollback() logger.error(f"Hiba a seed-elés során: {e}", exc_info=True) print(f"❌ Hiba: {e}") raise if __name__ == "__main__": logging.basicConfig(level=logging.INFO) asyncio.run(seed_expertise_taxonomy())