Files
erp-nutzfahrzeuge/backend/scripts/seed_admin.py
T

77 lines
2.0 KiB
Python
Raw Normal View History

"""Seed script to create initial admin user.
Usage:
python scripts/seed_admin.py
Environment variables required:
DATABASE_URL=postgresql+asyncpg://user:pass@host:5432/dbname
"""
import asyncio
import os
import sys
import uuid
from datetime import datetime
# Add app to path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy import text
from app.models.user import User
from app.services.auth_service import hash_password
from app.config import settings
async def seed_admin():
"""Create initial admin user if none exists."""
engine = create_async_engine(settings.DATABASE_URL, echo=False)
async with engine.begin() as conn:
# Create tables if they don't exist
from app.database import Base
await conn.run_sync(Base.metadata.create_all)
async with AsyncSession(engine) as session:
# Check if any admin exists
result = await session.execute(
text("SELECT COUNT(*) FROM users WHERE role = 'admin' AND is_active = true")
)
admin_count = result.scalar()
if admin_count > 0:
print("Admin user already exists. Skipping seed.")
return
# Create admin user
admin = User(
id=uuid.uuid4(),
email="admin@erp.local",
password_hash=hash_password("Admin123!ERP"),
full_name="System Administrator",
role="admin",
language="de",
is_active=True,
)
session.add(admin)
await session.commit()
print("=" * 50)
print("Admin user created successfully!")
print("=" * 50)
print(f"Email: admin@erp.local")
print(f"Password: Admin123!ERP")
print(f"Role: admin")
print(f"Language: de")
print("=" * 50)
print("⚠️ Please change the password after first login!")
print("=" * 50)
await engine.dispose()
if __name__ == "__main__":
asyncio.run(seed_admin())