Files
service-finder/backend/app/seed_test_scenario.py

107 lines
4.1 KiB
Python

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())