RABC fejlesztése és beélesítése hibák kijavításával
This commit is contained in:
78
backend/app/scripts/verify_migration.py
Normal file
78
backend/app/scripts/verify_migration.py
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Verify the results of the Great Garage & Vehicle Migration."""
|
||||
import asyncio
|
||||
import asyncpg
|
||||
|
||||
DATABASE_URL = "postgresql://service_finder_app:AppSafePass_2026@shared-postgres:5432/service_finder"
|
||||
|
||||
async def verify():
|
||||
conn = await asyncpg.connect(DATABASE_URL)
|
||||
|
||||
print("=== VERIFICATION REPORT ===")
|
||||
print()
|
||||
|
||||
# 1. Users without personal garages
|
||||
r = await conn.fetchval("""
|
||||
SELECT COUNT(*) FROM identity.users u
|
||||
JOIN identity.persons p ON p.id = u.person_id
|
||||
WHERE u.is_deleted = false AND u.is_active = true
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM fleet.organizations o
|
||||
WHERE o.owner_id = u.id AND o.org_type = 'individual' AND o.is_deleted = false
|
||||
)
|
||||
""")
|
||||
print(f"1. Users still WITHOUT personal garage: {r} (expected: 0)")
|
||||
|
||||
# 2. Total personal garages
|
||||
r = await conn.fetchval("""
|
||||
SELECT COUNT(*) FROM fleet.organizations
|
||||
WHERE org_type = 'individual' AND is_deleted = false
|
||||
""")
|
||||
print(f"2. Total personal garages (INDIVIDUAL): {r}")
|
||||
|
||||
# 3. Users with NULL scope_id
|
||||
r = await conn.fetchval("""
|
||||
SELECT COUNT(*) FROM identity.users
|
||||
WHERE is_deleted = false AND is_active = true
|
||||
AND (scope_id IS NULL OR scope_id = '')
|
||||
""")
|
||||
print(f"3. Users with NULL/empty scope_id: {r}")
|
||||
|
||||
# 4. Organization members with OWNER role
|
||||
r = await conn.fetchval("""
|
||||
SELECT COUNT(*) FROM fleet.organization_members WHERE role = 'OWNER'
|
||||
""")
|
||||
print(f"4. Organization members with OWNER role: {r}")
|
||||
|
||||
# 5. Orphaned vehicles remaining
|
||||
r = await conn.fetchval("""
|
||||
SELECT COUNT(*) FROM vehicle.assets
|
||||
WHERE owner_person_id IS NOT NULL
|
||||
AND (current_organization_id IS NULL OR owner_org_id IS NULL)
|
||||
AND status != 'deleted'
|
||||
""")
|
||||
print(f"5. Orphaned vehicles remaining: {r} (expected: 0)")
|
||||
|
||||
# 6. Detail of all personal garages
|
||||
rows = await conn.fetch("""
|
||||
SELECT o.id, o.name, u.email, u.scope_id
|
||||
FROM fleet.organizations o
|
||||
JOIN identity.users u ON u.id = o.owner_id
|
||||
WHERE o.org_type = 'individual' AND o.is_deleted = false
|
||||
ORDER BY o.id
|
||||
""")
|
||||
print(f"\n6. Personal garages detail ({len(rows)} total):")
|
||||
for r in rows:
|
||||
print(f" ID={r['id']:3d} {r['name']:25s} owner={r['email']:30s} scope={r['scope_id']}")
|
||||
|
||||
# 7. Count all vehicles and their org assignments
|
||||
r = await conn.fetchval("SELECT COUNT(*) FROM vehicle.assets WHERE status != 'deleted'")
|
||||
r2 = await conn.fetchval("""
|
||||
SELECT COUNT(*) FROM vehicle.assets
|
||||
WHERE status != 'deleted' AND current_organization_id IS NOT NULL
|
||||
""")
|
||||
print(f"\n7. Vehicles: {r} total, {r2} with organization assigned")
|
||||
|
||||
await conn.close()
|
||||
|
||||
asyncio.run(verify())
|
||||
Reference in New Issue
Block a user