166 lines
4.7 KiB
Python
166 lines
4.7 KiB
Python
import sys
|
|
import os
|
|
from pathlib import Path
|
|
sys.path.insert(0, str(Path(__file__).parent))
|
|
from sqlalchemy.orm import Session
|
|
from src.shared.config.database import SessionLocal
|
|
from src.models.role import Role
|
|
from src.models.user import User
|
|
import bcrypt
|
|
from datetime import datetime
|
|
|
|
def get_db():
|
|
db = SessionLocal()
|
|
try:
|
|
return db
|
|
finally:
|
|
pass
|
|
|
|
def seed_users(db: Session):
|
|
print('=' * 80)
|
|
print('SEEDING USERS')
|
|
print('=' * 80)
|
|
|
|
# Get roles
|
|
admin_role = db.query(Role).filter(Role.name == 'admin').first()
|
|
staff_role = db.query(Role).filter(Role.name == 'staff').first()
|
|
customer_role = db.query(Role).filter(Role.name == 'customer').first()
|
|
|
|
if not admin_role or not staff_role or not customer_role:
|
|
print(' ❌ Roles not found! Please seed roles first.')
|
|
return
|
|
|
|
users_data = [
|
|
{
|
|
'email': 'gnxsoft@gnxsoft.com',
|
|
'password': 'gnxsoft123',
|
|
'full_name': 'GNXSoft Admin',
|
|
'phone': '+1 (555) 111-2222',
|
|
'role': 'admin',
|
|
'currency': 'EUR',
|
|
'is_active': True
|
|
},
|
|
{
|
|
'email': 'admin@gnxsoft.com',
|
|
'password': 'admin123',
|
|
'full_name': 'Administrator',
|
|
'phone': '+1 (555) 222-3333',
|
|
'role': 'admin',
|
|
'currency': 'EUR',
|
|
'is_active': True
|
|
},
|
|
{
|
|
'email': 'staff@gnxsoft.com',
|
|
'password': 'staff123',
|
|
'full_name': 'Staff Member',
|
|
'phone': '+1 (555) 333-4444',
|
|
'role': 'staff',
|
|
'currency': 'EUR',
|
|
'is_active': True
|
|
},
|
|
{
|
|
'email': 'customer@gnxsoft.com',
|
|
'password': 'customer123',
|
|
'full_name': 'Customer User',
|
|
'phone': '+1 (555) 444-5555',
|
|
'role': 'customer',
|
|
'currency': 'EUR',
|
|
'is_active': True
|
|
},
|
|
{
|
|
'email': 'john.doe@gnxsoft.com',
|
|
'password': 'customer123',
|
|
'full_name': 'John Doe',
|
|
'phone': '+1 (555) 555-6666',
|
|
'role': 'customer',
|
|
'currency': 'USD',
|
|
'is_active': True
|
|
},
|
|
{
|
|
'email': 'jane.smith@gnxsoft.com',
|
|
'password': 'customer123',
|
|
'full_name': 'Jane Smith',
|
|
'phone': '+1 (555) 666-7777',
|
|
'role': 'customer',
|
|
'currency': 'EUR',
|
|
'is_active': True
|
|
},
|
|
{
|
|
'email': 'robert.wilson@gnxsoft.com',
|
|
'password': 'customer123',
|
|
'full_name': 'Robert Wilson',
|
|
'phone': '+1 (555) 777-8888',
|
|
'role': 'customer',
|
|
'currency': 'GBP',
|
|
'is_active': True
|
|
},
|
|
{
|
|
'email': 'maria.garcia@gnxsoft.com',
|
|
'password': 'customer123',
|
|
'full_name': 'Maria Garcia',
|
|
'phone': '+1 (555) 888-9999',
|
|
'role': 'customer',
|
|
'currency': 'EUR',
|
|
'is_active': True
|
|
}
|
|
]
|
|
|
|
role_map = {
|
|
'admin': admin_role.id,
|
|
'staff': staff_role.id,
|
|
'customer': customer_role.id
|
|
}
|
|
|
|
created_count = 0
|
|
skipped_count = 0
|
|
|
|
for user_data in users_data:
|
|
existing = db.query(User).filter(User.email == user_data['email']).first()
|
|
if existing:
|
|
print(f' ⚠️ User "{user_data["email"]}" already exists, skipping...')
|
|
skipped_count += 1
|
|
continue
|
|
|
|
password = user_data.pop('password')
|
|
role_name = user_data.pop('role')
|
|
role_id = role_map[role_name]
|
|
|
|
password_bytes = password.encode('utf-8')
|
|
salt = bcrypt.gensalt()
|
|
hashed_password = bcrypt.hashpw(password_bytes, salt).decode('utf-8')
|
|
|
|
user = User(
|
|
email=user_data['email'],
|
|
password=hashed_password,
|
|
full_name=user_data['full_name'],
|
|
phone=user_data.get('phone'),
|
|
role_id=role_id,
|
|
currency=user_data.get('currency', 'EUR'),
|
|
is_active=user_data.get('is_active', True)
|
|
)
|
|
db.add(user)
|
|
print(f' ✓ Created user: {user_data["email"]} ({role_name}) - Password: {password}')
|
|
created_count += 1
|
|
|
|
db.commit()
|
|
print(f'\n✓ Users seeded successfully!')
|
|
print(f' - Created: {created_count} user(s)')
|
|
print(f' - Skipped: {skipped_count} user(s) (already exist)')
|
|
print('=' * 80)
|
|
|
|
def main():
|
|
db = get_db()
|
|
try:
|
|
seed_users(db)
|
|
except Exception as e:
|
|
print(f'\n❌ Error: {e}')
|
|
import traceback
|
|
traceback.print_exc()
|
|
db.rollback()
|
|
finally:
|
|
db.close()
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|