STABLE: Final schema sync, optimized gitignore
This commit is contained in:
@@ -1,107 +1,120 @@
|
||||
# /opt/docker/dev/service_finder/backend/app/seed_test_scenario.py
|
||||
import asyncio
|
||||
import uuid
|
||||
from datetime import datetime, timedelta
|
||||
import logging
|
||||
from datetime import datetime, timedelta, timezone
|
||||
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.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
|
||||
)
|
||||
from app.models.organization import OrgType
|
||||
|
||||
# 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 SessionLocal() as db:
|
||||
print("🚀 Teszt ökoszisztéma felépítése a meglévő modellek alapján...")
|
||||
async with AsyncSessionLocal() as db:
|
||||
logger.info("🚀 MB2.0 Teszt ökoszisztéma felépítése indul...")
|
||||
|
||||
# 1. Admin lekérése
|
||||
admin = (await db.execute(select(User))).scalars().first()
|
||||
# 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:
|
||||
print("❌ Hiba: Nincs admin az adatbázisban!")
|
||||
logger.error("❌ Hiba: Nincs aktív felhasználó a rendszerben. Futtasd a seed_system.py-t!")
|
||||
return
|
||||
|
||||
# 2. SZERVEZETEK (A te OrgType enumod alapján)
|
||||
# Privát flotta
|
||||
# 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
|
||||
owner_id=admin.id,
|
||||
folder_slug="kincses-privat-vault"
|
||||
)
|
||||
# Céges flotta (OrgType.business-t használunk!)
|
||||
# Üzleti flotta
|
||||
company_org = Organization(
|
||||
name="ProfiBot Fleet",
|
||||
full_name="ProfiBot Software Solutions Kft.",
|
||||
org_type=OrgType.business,
|
||||
owner_id=admin.id
|
||||
owner_id=admin.id,
|
||||
folder_slug="profibot-fleet-vault"
|
||||
)
|
||||
# Szolgáltatók
|
||||
# Szolgáltatók (Szerviz és Üzemanyag)
|
||||
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
|
||||
owner_id=admin.id,
|
||||
is_active=True
|
||||
)
|
||||
|
||||
db.add_all([private_org, company_org, service_org, gas_station])
|
||||
db.add_all([private_org, company_org, service_org])
|
||||
await db.flush()
|
||||
|
||||
# Tagságok rögzítése
|
||||
db.add(OrganizationMember(user_id=admin.id, organization_id=private_org.id, role="owner"))
|
||||
# Tagsági viszonyok rögzítése
|
||||
db.add(OrganizationMember(user_id=admin.id, organization_id=company_org.id, role="owner"))
|
||||
|
||||
# 3. RÉTESZLETES JÁRMŰ ADAT (Tesla Model 3)
|
||||
# 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",
|
||||
year_from=2021, fuel_type="Electric",
|
||||
make="TESLA", model="MODEL 3", generation="Long Range (2021-)",
|
||||
fuel_type="electric",
|
||||
factory_data={
|
||||
"battery": "75 kWh", "power": "366 kW", "torque": "493 Nm",
|
||||
"tire_size": "235/45 R18", "oil_type": "None (EV)"
|
||||
"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="5YJ3E1EB8LF000000", license_plate="TES-777-EV",
|
||||
name="Főnök Teslája", year_of_manufacture=2021,
|
||||
catalog_id=catalog.id, status="active"
|
||||
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 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))
|
||||
# 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. KÖLTSÉGEK (9 kategória szimulálása)
|
||||
# 4. LOGIKA: A 9 költségtípus 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)
|
||||
("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, vendor_id in costs_data:
|
||||
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",
|
||||
data={"description": desc, "vendor_id": vendor_id},
|
||||
date=datetime.now() - timedelta(days=2)
|
||||
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()
|
||||
print("✅ Siker! Flották, Tesla és a 9 költségtípus rögzítve.")
|
||||
logger.info("✅ Siker! A teljes flotta-ökoszisztéma üzemkész.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(seed_test_scenario())
|
||||
Reference in New Issue
Block a user