import asyncio import os from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy import text from dotenv import load_dotenv load_dotenv() raw_url = os.getenv("DATABASE_URL") if not raw_url: raw_url = "postgresql://admin:PASSWORD_111@postgres-db:5432/service_finder" DATABASE_URL = raw_url.replace("postgresql://", "postgresql+asyncpg://").replace("/service_finder_db", "/service_finder") async def seed_cost_types(): engine = create_async_engine(DATABASE_URL) async with engine.begin() as conn: print("🔨 Költség típusok tábla létrehozása...") await conn.execute(text(""" CREATE TABLE IF NOT EXISTS ref.cost_types ( code VARCHAR(50) PRIMARY KEY, name VARCHAR(100) NOT NULL, parent_code VARCHAR(50) REFERENCES ref.cost_types(code), -- Hierarchia! is_active BOOLEAN DEFAULT TRUE, sort_order INTEGER DEFAULT 0 ); """)) print("📥 Adatok feltöltése...") # Először a szülők (Főkategóriák) parents = [ ('FUEL', '⛽ Tankolás', 10), ('PURCHASE', '💰 Beszerzés / Pénzügy', 20), ('INSURANCE', '📄 Biztosítás', 30), ('TAX', '🏛️ Adó / Illeték', 40), ('SERVICE', '🔧 Szerviz', 50), ('OTHER', 'Egyéb', 99) ] for p in parents: await conn.execute(text("INSERT INTO ref.cost_types (code, name, sort_order) VALUES (:c, :n, :s) ON CONFLICT (code) DO NOTHING"), {"c": p[0], "n": p[1], "s": p[2]}) # Aztán a gyerekek (Alkategóriák) children = [ # Beszerzés ('PURCHASE_PRICE', 'Vételár', 'PURCHASE'), ('FINANCE_LEASE', 'Lízing díj', 'PURCHASE'), ('FINANCE_LOAN', 'Hitel törlesztő', 'PURCHASE'), ('IMPORT_FEE', 'Honosítás / Regadó', 'PURCHASE'), # Biztosítás ('INSURANCE_KGFB', 'Kötelező (KGFB)', 'INSURANCE'), ('INSURANCE_CASCO', 'Casco', 'INSURANCE'), ('INSURANCE_GAP', 'GAP', 'INSURANCE'), ('INSURANCE_ASSIST', 'Assistance', 'INSURANCE'), # Adó ('TAX_WEIGHT', 'Gépjárműadó (Súlyadó)', 'TAX'), ('TAX_COMPANY', 'Cégautóadó', 'TAX'), ('TAX_TRANSFER', 'Vagyonszerzési illeték', 'TAX'), ('TAX_OTHER', 'Egyéb adó', 'TAX'), # Szerviz ('SERVICE_MAINTENANCE', 'Kötelező karbantartás', 'SERVICE'), ('SERVICE_REPAIR', 'Javítás', 'SERVICE'), ('SERVICE_TIRE', 'Gumicsere', 'SERVICE'), ('SERVICE_MOT', 'Műszaki vizsga', 'SERVICE') ] for c in children: await conn.execute(text("INSERT INTO ref.cost_types (code, name, parent_code) VALUES (:c, :n, :p) ON CONFLICT (code) DO NOTHING"), {"c": c[0], "n": c[1], "p": c[2]}) print("✅ KÉSZ! A tudás most már az adatbázisban van, nem a HTML-ben.") await engine.dispose() if __name__ == "__main__": asyncio.run(seed_cost_types())