35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy import select
|
|
from app.models.asset import Asset, AssetTelemetry, AssetFinancials
|
|
from app.models.gamification import UserStats, PointRule
|
|
import uuid
|
|
|
|
async def create_new_vehicle(db: AsyncSession, user_id: int, vin: str, license_plate: str):
|
|
# 1. Alap Asset létrehozása
|
|
new_asset = Asset(
|
|
vin=vin,
|
|
license_plate=license_plate,
|
|
name=f"Teszt Autó ({license_plate})"
|
|
)
|
|
db.add(new_asset)
|
|
await db.flush() # Hogy legyen ID-ja
|
|
|
|
# 2. Modulok inicializálása (Digital Twin alapozás)
|
|
db.add(AssetTelemetry(asset_id=new_asset.id, current_mileage=0))
|
|
db.add(AssetFinancials(asset_id=new_asset.id))
|
|
|
|
# 3. GAMIFICATION: Pontszerzés (ASSET_REGISTER = 100 XP)
|
|
# Megkeressük a szabályt
|
|
rule_stmt = select(PointRule).where(PointRule.action_key == "ASSET_REGISTER")
|
|
rule = (await db.execute(rule_stmt)).scalar_one_or_none()
|
|
|
|
if rule:
|
|
# Frissítjük a felhasználó XP-jét
|
|
stats_stmt = select(UserStats).where(UserStats.user_id == user_id)
|
|
stats = (await db.execute(stats_stmt)).scalar_one_or_none()
|
|
if stats:
|
|
stats.total_xp += rule.points
|
|
# Itt később jöhet a szintlépés ellenőrzése is!
|
|
|
|
await db.commit()
|
|
return new_asset |