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