# /opt/docker/dev/service_finder/backend/app/tests_internal/seeds/seed_catalog.py """ 🌱 MB2.0 KATALÓGUS ÉS ROBOT SEEDER ---------------------------------- CÉL: A járműkatalógus alapadatainak és a robotok munkalistájának feltöltése. FUNKCIÓK: 1. DiscoveryParameter: Azon városok rögzítése, ahol a Scout robot keresni fog. 2. CatalogDiscovery: Azon márkák rögzítése, amiket a Robot 0/1 fel fog dolgozni. 3. AssetCatalog: 'Arany' (már validált) technikai rekordok beszúrása. JAVÍTÁSOK: - 'last_error' oszlop eltávolítva (mivel az adatbázisban nem létezik). - 'attempts' mező kényszerített 0 értékkel (NOT NULL kényszer miatt). """ import asyncio import logging from app.database import AsyncSessionLocal from app.models.asset import AssetCatalog, CatalogDiscovery from app.models.staged_data import DiscoveryParameter # Logolás beállítása logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] Sentinel-Seed: %(message)s') logger = logging.getLogger("Seed-Catalog") async def quick_seed(): """ Katalógus és Discovery adatok inicializálása. """ async with AsyncSessionLocal() as db: logger.info("🚀 Katalógus alapozás indítása...") try: # 1. Felderítendő Városok (DiscoveryParameter) # A Scout robot ezekben a városokban kezdi meg a szervizek kutatását. cities = [ ("BUDAPEST", "HU"), ("DEBRECEN", "HU"), ("GYŐR", "HU"), ("SZEGED", "HU") ] for city_name, country in cities: db.add(DiscoveryParameter( city=city_name, country_code=country, is_active=True )) # 2. Felderítendő Márkák és Típusok (CatalogDiscovery) # Ezeket a rekordokat fogja a Robot 0 és Robot 1 feldolgozni a háttérben. discovery_queue = [ ("SUZUKI", "ALL"), ("TOYOTA", "ALL"), ("HONDA", "ALL"), ("SKODA", "ALL"), ("YAMAHA", "ALL") ] for m, mod in discovery_queue: # Az attempts=0 kötelező a DB kényszer miatt db.add(CatalogDiscovery( make=m, model=mod, status="pending", attempts=0 )) # 3. Arany rekordok (AssetCatalog / vehicle_catalog tábla) # Példa adatok, amik már átmentek a validációs folyamaton. gold_data = [ AssetCatalog( make="SUZUKI", model="VITARA", generation="LY (2015-)", fuel_type="petrol", factory_data={"segment": "SUV", "origin": "Hungary"} ), AssetCatalog( make="SKODA", model="OCTAVIA", generation="IV (2020-)", fuel_type="diesel", factory_data={"segment": "Sedan/Combi"} ) ] db.add_all(gold_data) # Mentés végrehajtása await db.commit() logger.info("✨ Katalógus és Discovery paraméterek sikeresen rögzítve!") except Exception as e: await db.rollback() logger.error(f"❌ HIBA a katalógus feltöltésekor: {e}") raise e if __name__ == "__main__": asyncio.run(quick_seed())