86 lines
2.7 KiB
Python
86 lines
2.7 KiB
Python
"""
|
||
Seed script для создания тестовых пользователей
|
||
Создаёт трёх пользователей с разными ролями: operator, field, admin
|
||
"""
|
||
import sys
|
||
sys.path.append('/app')
|
||
|
||
from sqlalchemy.orm import Session
|
||
from passlib.context import CryptContext
|
||
from database import SessionLocal
|
||
from models import User
|
||
import uuid
|
||
|
||
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
|
||
|
||
def get_password_hash(password: str) -> str:
|
||
# Обрезаем пароль до 72 байт для bcrypt
|
||
return pwd_context.hash(password[:72])
|
||
|
||
def create_test_users():
|
||
"""Создание тестовых пользователей"""
|
||
db = SessionLocal()
|
||
|
||
try:
|
||
# Проверяем, есть ли уже пользователи
|
||
existing_users = db.query(User).count()
|
||
if existing_users > 0:
|
||
print(f"В базе уже есть {existing_users} пользователей. Пропускаем seed.")
|
||
return
|
||
|
||
test_users = [
|
||
{
|
||
"username": "operator",
|
||
"email": "operator@mchs.by",
|
||
"password": "pass123",
|
||
"full_name": "Оператор ЦОУ",
|
||
"role": "operator"
|
||
},
|
||
{
|
||
"username": "field",
|
||
"email": "field@mchs.by",
|
||
"password": "pass123",
|
||
"full_name": "Полевой работник",
|
||
"role": "field"
|
||
},
|
||
{
|
||
"username": "admin",
|
||
"email": "admin@mchs.by",
|
||
"password": "pass123",
|
||
"full_name": "Администратор",
|
||
"role": "admin"
|
||
}
|
||
]
|
||
|
||
print("Создание тестовых пользователей...")
|
||
|
||
for user_data in test_users:
|
||
password = user_data.pop("password")
|
||
hashed_password = get_password_hash(password)
|
||
|
||
db_user = User(
|
||
id=uuid.uuid4(),
|
||
hashed_password=hashed_password,
|
||
is_active=True,
|
||
**user_data
|
||
)
|
||
db.add(db_user)
|
||
print(f" + {user_data['username']} ({user_data['role']})")
|
||
|
||
db.commit()
|
||
print("\nТестовые пользователи созданы!")
|
||
print("\nДля входа используйте пароль: pass123")
|
||
print(" operator / pass123")
|
||
print(" field / pass123")
|
||
print(" admin / pass123")
|
||
|
||
except Exception as e:
|
||
print(f"Ошибка: {e}")
|
||
db.rollback()
|
||
raise
|
||
finally:
|
||
db.close()
|
||
|
||
if __name__ == "__main__":
|
||
create_test_users()
|