# /opt/docker/dev/service_finder/backend/app/seed_test_scenario.py import asyncio import uuid import logging from datetime import datetime, timedelta, timezone from sqlalchemy import select from app.database import AsyncSessionLocal from app.models.identity import User from app.models.organization import Organization, OrganizationMember, OrgType from app.models.asset import ( Asset, AssetCatalog, AssetTelemetry, AssetFinancials, AssetCost ) # Sentinel naplózás logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] Sentinel-Scenario: %(message)s') logger = logging.getLogger("Test-Scenario") async def seed_test_scenario(): async with AsyncSessionLocal() as db: logger.info("🚀 MB2.0 Teszt ökoszisztéma felépítése indul...") # 1. LOGIKA: Admin (Superuser) lekérése az identity sémából res = await db.execute(select(User).where(User.is_active == True)) admin = res.scalars().first() if not admin: logger.error("❌ Hiba: Nincs aktív felhasználó a rendszerben. Futtasd a seed_system.py-t!") return # 2. LOGIKA: Szervezeti struktúra felállítása # Privát garázs private_org = Organization( name="Kincses Privát", full_name="Kincses Magánflotta és Garázs", org_type=OrgType.individual, owner_id=admin.id, folder_slug="kincses-privat-vault" ) # Üzleti flotta company_org = Organization( name="ProfiBot Fleet", full_name="ProfiBot Software Solutions Kft.", org_type=OrgType.business, owner_id=admin.id, folder_slug="profibot-fleet-vault" ) # Szolgáltatók (Szerviz és Üzemanyag) service_org = Organization( name="Mester Szerviz", org_type=OrgType.service, owner_id=admin.id, is_active=True ) db.add_all([private_org, company_org, service_org]) await db.flush() # Tagsági viszonyok rögzítése db.add(OrganizationMember(user_id=admin.id, organization_id=company_org.id, role="owner")) # 3. LOGIKA: Tesla Model 3 - Digitális Iker (Digital Twin) # Előbb a katalógus (Gold Data) catalog = AssetCatalog( make="TESLA", model="MODEL 3", generation="Long Range (2021-)", fuel_type="electric", factory_data={ "battery": "75 kWh", "power_kw": 366, "tire_size": "235/45 R18", "ac_charge": "11kW" } ) db.add(catalog) await db.flush() # Majd a konkrét jármű (Asset) vehicle = Asset( vin=f"5YJ3E1EB8LF{uuid.uuid4().hex[:6].upper()}", license_plate="TES-777-EV", name="Céges Tesla", year_of_manufacture=2021, catalog_id=catalog.id, owner_org_id=company_org.id, status="active" ) db.add(vehicle) await db.flush() # Telemetria és Pénzügyi alapok db.add(AssetTelemetry(asset_id=vehicle.id, current_mileage=45200, vqi_score=100.0)) db.add(AssetFinancials(asset_id=vehicle.id, acquisition_price=18500000, currency="HUF")) # 4. LOGIKA: A 9 költségtípus szimulálása costs_data = [ ("FUEL", 12500, "Supercharger töltés"), ("MAINTENANCE", 85000, "Pollenszűrő és átvizsgálás"), ("TIRES", 280000, "Téli gumi szett"), ("INSURANCE", 32000, "Havi CASCO"), ("TAX", 15000, "Cégautóadó (szimulált)"), ("TOLL", 6500, "Éves matrica"), ("CLEANING", 4500, "Külső-belső takarítás"), ("PARKING", 1200, "Belvárosi zóna"), ("OTHER", 2500, "Szélvédőmosó folyadék") ] for c_type, amount, desc in costs_data: db.add(AssetCost( asset_id=vehicle.id, organization_id=company_org.id, cost_type=c_type, amount=amount, currency="HUF", date=datetime.now(timezone.utc) - timedelta(days=2), specifications={"description": desc} )) await db.commit() logger.info("✅ Siker! A teljes flotta-ökoszisztéma üzemkész.") if __name__ == "__main__": asyncio.run(seed_test_scenario())