#!/usr/bin/env python3 """ Fix asset person IDs - update owner_person_id from User ID to Person ID. """ import asyncio import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) from sqlalchemy import select, update from sqlalchemy.ext.asyncio import AsyncSession from app.db.session import AsyncSessionLocal from app.models.vehicle.asset import Asset from app.models.identity.identity import User async def fix_asset_person_ids(): async with AsyncSessionLocal() as db: # Get User 28 user_stmt = select(User).where(User.id == 28) user_result = await db.execute(user_stmt) test_user = user_result.scalar_one_or_none() if not test_user: print("❌ User 28 not found") return print(f"✅ Found User 28:") print(f" - User ID: {test_user.id}") print(f" - Person ID: {test_user.person_id}") print(f" - Email: {test_user.email}") if not test_user.person_id: print("❌ User has no person_id") return # Find assets with owner_person_id = 28 (User ID) asset_stmt = select(Asset).where( Asset.owner_person_id == 28 ) asset_result = await db.execute(asset_stmt) assets = asset_result.scalars().all() print(f"\n✅ Found {len(assets)} assets with owner_person_id = 28:") for asset in assets: print(f" - {asset.license_plate} (Asset ID: {asset.id})") if assets: # Update them to have person_id = 29 update_stmt = ( update(Asset) .where(Asset.owner_person_id == 28) .values(owner_person_id=test_user.person_id) ) result = await db.execute(update_stmt) await db.commit() print(f"\n✅ Updated {result.rowcount} assets:") print(f" - Changed owner_person_id from 28 to {test_user.person_id}") # Verify the update asset_stmt = select(Asset).where( Asset.owner_person_id == test_user.person_id ) asset_result = await db.execute(asset_stmt) updated_assets = asset_result.scalars().all() print(f"\n✅ Verification - Found {len(updated_assets)} assets with owner_person_id = {test_user.person_id}:") for asset in updated_assets: print(f" - {asset.license_plate}") else: print("\nℹ️ No assets found with owner_person_id = 28") # Also check for operator_person_id = 28 operator_asset_stmt = select(Asset).where( Asset.operator_person_id == 28 ) operator_asset_result = await db.execute(operator_asset_stmt) operator_assets = operator_asset_result.scalars().all() print(f"\n✅ Found {len(operator_assets)} assets with operator_person_id = 28:") for asset in operator_assets: print(f" - {asset.license_plate} (Asset ID: {asset.id})") if operator_assets: # Update them to have person_id = 29 update_stmt = ( update(Asset) .where(Asset.operator_person_id == 28) .values(operator_person_id=test_user.person_id) ) result = await db.execute(update_stmt) await db.commit() print(f"\n✅ Updated {result.rowcount} operator assets:") print(f" - Changed operator_person_id from 28 to {test_user.person_id}") if __name__ == "__main__": asyncio.run(fix_asset_person_ids())