120 lines
4.4 KiB
Python
Executable File
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()) |