# /opt/docker/dev/service_finder/backend/app/tests_internal/fixes/final_admin_fix.py import asyncio import uuid from sqlalchemy import text, select from app.database import AsyncSessionLocal from app.models.identity import User, Person, UserRole from app.core.security import get_password_hash async def run_fix(): print("\n" + "═"*50) print("🛠️ ADMIN RENDSZERJAVÍTÁS ÉS INICIALIZÁLÁS (MB2.0)") print("═"*50) async with AsyncSessionLocal() as db: # 1. LOGIKA: Séma ellenőrzése az 'identity' névtérben # Az MB2.0-ban a felhasználók már nem a 'data', hanem az 'identity' sémában vannak. check_query = text(""" SELECT column_name FROM information_schema.columns WHERE table_schema = 'identity' AND table_name = 'users' """) res = await db.execute(check_query) cols = [r[0] for r in res.fetchall()] if not cols: print("❌ HIBA: Az 'identity.users' tábla nem található. Futtasd az Alembic migrációt!") return if "hashed_password" not in cols: print("❌ HIBA: A 'hashed_password' oszlop hiányzik. Az adatbázis sémája elavult.") return # 2. LOGIKA: Admin keresése admin_email = "admin@profibot.hu" stmt = select(User).where(User.email == admin_email) existing_res = await db.execute(stmt) existing_admin = existing_res.scalar_one_or_none() if existing_admin: print(f"⚠️ Információ: A(z) {admin_email} felhasználó már létezik.") # Opcionális: Jelszó kényszerített frissítése, ha elfelejtetted # existing_admin.hashed_password = get_password_hash("Admin123!") # await db.commit() else: try: # 3. LOGIKA: Person és User létrehozása (MB2.0 Standard) # Előbb létrehozzuk a fizikai személyt new_person = Person( id_uuid=uuid.uuid4(), first_name="Rendszer", last_name="Adminisztrátor", is_active=True ) db.add(new_person) await db.flush() # ID lekérése a mentés előtt # Létrehozzuk a felhasználói fiókot az Admin role-al new_admin = User( email=admin_email, hashed_password=get_password_hash("Admin123!"), person_id=new_person.id, role=UserRole.superadmin, # MB2.0 enum érték is_active=True, is_deleted=False, preferred_language="hu" ) db.add(new_admin) await db.commit() print(f"✅ SIKER: Superadmin létrehozva!") print(f" 📧 Email: {admin_email}") print(f" 🔑 Jelszó: Admin123!") except Exception as e: print(f"❌ HIBA a mentés során: {e}") await db.rollback() print("\n" + "═"*50) print("🏁 JAVÍTÁSI FOLYAMAT BEFEJEZŐDÖTT") print("═"*50 + "\n") if __name__ == "__main__": asyncio.run(run_fix())