matching / add_admin_user.py
Calcifer0323's picture
Fix: Update to RoSBERTa model (1024 dims), remove half precision, increase timeout
93cd57d
"""
Скрипт для добавления тестового пользователя-администратора в БД.
Подключается к PostgreSQL на Render и создает пользователя с ролью ADMIN.
"""
import psycopg2
import bcrypt
from uuid import uuid4
# Параметры подключения к БД на Render
DB_CONFIG = {
'host': 'dpg-d5ht8vi4d50c739akh2g-a.virginia-postgres.render.com',
'port': 5432,
'database': 'lead_exchange_bk',
'user': 'lead_exchange_bk_user',
'password': '8m2gtTRBW0iAr7nY2Aadzz0VcZBEVKYM'
}
# Данные администратора
ADMIN_USER = {
'user_id': str(uuid4()),
'email': 'admin@leadexchange.com',
'password': 'admin123', # Будет захеширован
'first_name': 'Админ',
'last_name': 'Администраторов',
'phone': '+79999999999',
'agency_name': 'Lead Exchange Administration',
'avatar_url': 'https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_1280.png',
'role': 'ADMIN'
}
def hash_password(password: str) -> str:
"""Хеширование пароля с помощью bcrypt."""
salt = bcrypt.gensalt()
hashed = bcrypt.hashpw(password.encode('utf-8'), salt)
return hashed.decode('utf-8')
def create_admin_user():
"""Создание пользователя-администратора в БД."""
try:
# Подключение к БД
print(f"Подключение к базе данных {DB_CONFIG['database']}...")
conn = psycopg2.connect(**DB_CONFIG)
cursor = conn.cursor()
# Проверяем, существует ли таблица users
cursor.execute("""
SELECT EXISTS (
SELECT FROM information_schema.tables
WHERE table_name = 'users'
);
""")
table_exists = cursor.fetchone()[0]
if not table_exists:
print("⚠️ Таблица 'users' не существует. Создаем...")
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
user_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
phone TEXT UNIQUE,
agency_name TEXT,
avatar_url TEXT,
role TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
""")
conn.commit()
print("✅ Таблица 'users' создана")
# Проверяем, существует ли уже пользователь с таким email
cursor.execute("SELECT email FROM users WHERE email = %s", (ADMIN_USER['email'],))
existing_user = cursor.fetchone()
if existing_user:
print(f"⚠️ Пользователь с email {ADMIN_USER['email']} уже существует")
# Спрашиваем, обновить ли пароль
update = input("Обновить пароль? (y/n): ").lower().strip()
if update == 'y':
password_hash = hash_password(ADMIN_USER['password'])
cursor.execute(
"UPDATE users SET password_hash = %s WHERE email = %s",
(password_hash, ADMIN_USER['email'])
)
conn.commit()
print("✅ Пароль обновлен")
else:
print("❌ Операция отменена")
return
# Хешируем пароль
print("Хеширование пароля...")
password_hash = hash_password(ADMIN_USER['password'])
# Вставляем пользователя
print(f"Создание администратора {ADMIN_USER['email']}...")
cursor.execute("""
INSERT INTO users (
user_id, email, password_hash, first_name, last_name,
phone, agency_name, avatar_url, role
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
""", (
ADMIN_USER['user_id'],
ADMIN_USER['email'],
password_hash,
ADMIN_USER['first_name'],
ADMIN_USER['last_name'],
ADMIN_USER['phone'],
ADMIN_USER['agency_name'],
ADMIN_USER['avatar_url'],
ADMIN_USER['role']
))
conn.commit()
print("\n" + "="*60)
print("✅ Администратор успешно создан!")
print("="*60)
print(f"ID: {ADMIN_USER['user_id']}")
print(f"Email: {ADMIN_USER['email']}")
print(f"Пароль: {ADMIN_USER['password']}")
print(f"Роль: {ADMIN_USER['role']}")
print(f"Имя: {ADMIN_USER['first_name']} {ADMIN_USER['last_name']}")
print(f"Телефон: {ADMIN_USER['phone']}")
print("="*60)
cursor.close()
conn.close()
except psycopg2.Error as e:
print(f"❌ Ошибка PostgreSQL: {e}")
raise
except Exception as e:
print(f"❌ Ошибка: {e}")
raise
def verify_admin_user():
"""Проверка, что администратор успешно создан."""
try:
conn = psycopg2.connect(**DB_CONFIG)
cursor = conn.cursor()
cursor.execute("""
SELECT user_id, email, first_name, last_name, role, created_at
FROM users
WHERE email = %s
""", (ADMIN_USER['email'],))
user = cursor.fetchone()
if user:
print("\n📋 Информация о пользователе в БД:")
print(f" ID: {user[0]}")
print(f" Email: {user[1]}")
print(f" Имя: {user[2]} {user[3]}")
print(f" Роль: {user[4]}")
print(f" Создан: {user[5]}")
else:
print("❌ Пользователь не найден в БД")
cursor.close()
conn.close()
except Exception as e:
print(f"❌ Ошибка при проверке: {e}")
if __name__ == "__main__":
print("🚀 Скрипт создания администратора Lead Exchange")
print("-" * 60)
try:
create_admin_user()
verify_admin_user()
except KeyboardInterrupt:
print("\n\n⚠️ Операция прервана пользователем")
except Exception as e:
print(f"\n❌ Критическая ошибка: {e}")
exit(1)