import asyncio import uuid from datetime import datetime, timedelta from sqlalchemy import select from app.db.session import SessionLocal from app.models import ( User, Organization, OrganizationMember, Asset, AssetCatalog, AssetTelemetry, AssetFinancials, AssetCost, AssetEvent ) from app.models.organization import OrgType async def seed_test_scenario(): async with SessionLocal() as db: print("🚀 Teszt ökoszisztéma felépítése a meglévő modellek alapján...") # 1. Admin lekérése admin = (await db.execute(select(User))).scalars().first() if not admin: print("❌ Hiba: Nincs admin az adatbázisban!") return # 2. SZERVEZETEK (A te OrgType enumod alapján) # Privát flotta private_org = Organization( name="Kincses Privát", full_name="Kincses Magánflotta és Garázs", org_type=OrgType.individual, owner_id=admin.id ) # Céges flotta (OrgType.business-t használunk!) company_org = Organization( name="ProfiBot Fleet", full_name="ProfiBot Software Solutions Kft.", org_type=OrgType.business, owner_id=admin.id ) # Szolgáltatók service_org = Organization( name="Mester Szerviz", full_name="Mester Autójavító és Vizsgabázis Kft.", org_type=OrgType.service, owner_id=admin.id ) gas_station = Organization( name="MOL Digit", full_name="MOL Digitális Töltőállomás 001", org_type=OrgType.service_provider, # OrgType.service_provider-t használunk! owner_id=admin.id ) db.add_all([private_org, company_org, service_org, gas_station]) await db.flush() # Tagságok rögzítése db.add(OrganizationMember(user_id=admin.id, organization_id=private_org.id, role="owner")) db.add(OrganizationMember(user_id=admin.id, organization_id=company_org.id, role="owner")) # 3. RÉTESZLETES JÁRMŰ ADAT (Tesla Model 3) catalog = AssetCatalog( make="Tesla", model="Model 3", generation="Long Range", year_from=2021, fuel_type="Electric", factory_data={ "battery": "75 kWh", "power": "366 kW", "torque": "493 Nm", "tire_size": "235/45 R18", "oil_type": "None (EV)" } ) db.add(catalog) await db.flush() vehicle = Asset( vin="5YJ3E1EB8LF000000", license_plate="TES-777-EV", name="Főnök Teslája", year_of_manufacture=2021, catalog_id=catalog.id, status="active" ) db.add(vehicle) await db.flush() # Telemetria és Pénzügyi modulok db.add(AssetTelemetry(asset_id=vehicle.id, current_mileage=45200, vqi_score=100.0, dbs_score=100.0)) db.add(AssetFinancials(asset_id=vehicle.id, acquisition_price=18500000)) # 4. KÖLTSÉGEK (9 kategória szimulálása) costs_data = [ ("FUEL", 15000, "Szupertöltés MOL", gas_station.id), ("MAINTENANCE", 120000, "Éves szerviz + fékfolyadék", service_org.id), ("TIRES", 240000, "Michelin Pilot Sport szett", None), ("INSURANCE", 45000, "Allianz Casco", None), ("TAX", 0, "Zöld rendszám kedvezmény", None), ("TOLL", 5500, "Pest megyei e-matrica", None), ("CLEANING", 8500, "Nano bevonat + Mosás", None), ("PARKING", 2400, "Airport Parking", None), ("FINE", 0, "Nincs aktív bírság", None) ] for c_type, amount, desc, vendor_id in costs_data: db.add(AssetCost( asset_id=vehicle.id, organization_id=company_org.id, cost_type=c_type, amount=amount, currency="HUF", data={"description": desc, "vendor_id": vendor_id}, date=datetime.now() - timedelta(days=2) )) await db.commit() print("✅ Siker! Flották, Tesla és a 9 költségtípus rögzítve.") if __name__ == "__main__": asyncio.run(seed_test_scenario())