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

120 lines
4.4 KiB
Python
Executable File

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