Spaces:
Running
Running
| import sys | |
| import os | |
| import asyncio | |
| import logging | |
| from datetime import datetime | |
| # Add the parent directory to sys.path to allow importing from 'app' | |
| # This assumes the script is in backend/scripts/ | |
| current_dir = os.path.dirname(os.path.abspath(__file__)) | |
| parent_dir = os.path.dirname(current_dir) | |
| sys.path.append(parent_dir) | |
| from app.core import security # noqa: E402 | |
| from app.models.models import User, Workspace, WorkspaceMember, WorkspaceRole # noqa: E402 | |
| from app.core.config import settings # noqa: E402 | |
| from sqlmodel import select, SQLModel # noqa: E402 | |
| from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession # noqa: E402 | |
| from sqlalchemy.orm import sessionmaker # noqa: E402 | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger(__name__) | |
| async def create_test_user(): | |
| # Use the same engine logic as the app | |
| engine = create_async_engine(settings.DATABASE_URL) | |
| async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) | |
| async with engine.begin() as conn: | |
| await conn.run_sync(SQLModel.metadata.create_all) | |
| async with async_session() as session: | |
| # Check if test user exists | |
| email = "test@example.com" | |
| result = await session.execute(select(User).where(User.email == email)) | |
| user = result.scalars().first() | |
| if user: | |
| logger.info(f"User {email} already exists.") | |
| else: | |
| # Create user | |
| logger.info(f"Creating test user: {email}") | |
| db_user = User( | |
| email=email, | |
| hashed_password=security.get_password_hash("Password123!"), | |
| full_name="Test User", | |
| is_active=True, | |
| is_superuser=True, | |
| email_verified_at=datetime.utcnow(), | |
| ) | |
| session.add(db_user) | |
| await session.flush() | |
| # Create workspace | |
| logger.info("Creating workspace for test user...") | |
| db_workspace = Workspace(name="Test Workspace") | |
| session.add(db_workspace) | |
| await session.flush() | |
| # Create membership | |
| logger.info("Creating workspace membership...") | |
| db_membership = WorkspaceMember( | |
| user_id=db_user.id, | |
| workspace_id=db_workspace.id, | |
| role=WorkspaceRole.OWNER | |
| ) | |
| session.add(db_membership) | |
| # --- Mission 8: Zoho Integration Setup --- | |
| from app.models.models import Integration, ZohoLeadMapping | |
| logger.info("Setting up Zoho Integration for test user...") | |
| db_integration = Integration( | |
| workspace_id=db_workspace.id, | |
| provider="zoho", | |
| status="connected", | |
| encrypted_config='{"refresh_token": "mock_refresh", "client_id": "mock_client", "client_secret": "mock_secret", "access_token": "mock_access", "expires_at": "2099-01-01T00:00:00"}' | |
| ) | |
| session.add(db_integration) | |
| db_mapping = ZohoLeadMapping( | |
| workspace_id=db_workspace.id, | |
| dedupe_strategy="EMAIL_OR_PHONE", | |
| field_mappings={ | |
| "first_name": "First_Name", | |
| "last_name": "Last_Name", | |
| "email": "Email", | |
| "phone": "Phone", | |
| "company": "Company", | |
| "description": "Description" | |
| } | |
| ) | |
| session.add(db_mapping) | |
| await session.commit() | |
| logger.info("Test user and Zoho configuration created successfully.") | |
| # --- Seed documented admin user (admin@leadpilot.io) --- | |
| async with async_session() as session: | |
| admin_email = "admin@leadpilot.io" | |
| result = await session.execute(select(User).where(User.email == admin_email)) | |
| admin_user = result.scalars().first() | |
| if admin_user: | |
| logger.info(f"Admin user {admin_email} already exists.") | |
| else: | |
| logger.info(f"Creating admin user: {admin_email}") | |
| db_admin = User( | |
| email=admin_email, | |
| hashed_password=security.get_password_hash("LeadPilot@password123"), | |
| full_name="LeadPilot Admin", | |
| is_active=True, | |
| is_superuser=True, | |
| email_verified_at=datetime.utcnow(), | |
| ) | |
| session.add(db_admin) | |
| await session.flush() | |
| db_admin_ws = Workspace(name="Admin Workspace") | |
| session.add(db_admin_ws) | |
| await session.flush() | |
| db_admin_member = WorkspaceMember( | |
| user_id=db_admin.id, | |
| workspace_id=db_admin_ws.id, | |
| role=WorkspaceRole.OWNER, | |
| ) | |
| session.add(db_admin_member) | |
| await session.commit() | |
| logger.info(f"Admin user {admin_email} created successfully.") | |
| # --- Seed studio demo user (demo@leadpilot.com) --- | |
| async with async_session() as session: | |
| demo_email = "demo@leadpilot.com" | |
| result = await session.execute(select(User).where(User.email == demo_email)) | |
| if result.scalars().first(): | |
| logger.info(f"Demo user {demo_email} already exists.") | |
| else: | |
| logger.info(f"Creating demo user: {demo_email}") | |
| db_demo = User( | |
| email=demo_email, | |
| hashed_password=security.get_password_hash("demo123456"), | |
| full_name="Demo User", | |
| is_active=True, | |
| is_superuser=False, | |
| email_verified_at=datetime.utcnow(), | |
| ) | |
| session.add(db_demo) | |
| await session.flush() | |
| db_demo_ws = Workspace(name="Demo Workspace") | |
| session.add(db_demo_ws) | |
| await session.flush() | |
| db_demo_member = WorkspaceMember( | |
| user_id=db_demo.id, | |
| workspace_id=db_demo_ws.id, | |
| role=WorkspaceRole.OWNER, | |
| ) | |
| session.add(db_demo_member) | |
| await session.commit() | |
| logger.info(f"Demo user {demo_email} created successfully.") | |
| # --- Seed superadmin (admin@leadpilot.com) --- | |
| async with async_session() as session: | |
| sa_email = "admin@leadpilot.com" | |
| result = await session.execute(select(User).where(User.email == sa_email)) | |
| if result.scalars().first(): | |
| logger.info(f"Superadmin {sa_email} already exists.") | |
| else: | |
| logger.info(f"Creating superadmin: {sa_email}") | |
| db_sa = User( | |
| email=sa_email, | |
| hashed_password=security.get_password_hash("admin123456"), | |
| full_name="Admin", | |
| is_active=True, | |
| is_superuser=True, | |
| email_verified_at=datetime.utcnow(), | |
| ) | |
| session.add(db_sa) | |
| await session.flush() | |
| db_sa_ws = Workspace(name="Admin Workspace") | |
| session.add(db_sa_ws) | |
| await session.flush() | |
| db_sa_member = WorkspaceMember( | |
| user_id=db_sa.id, | |
| workspace_id=db_sa_ws.id, | |
| role=WorkspaceRole.OWNER, | |
| ) | |
| session.add(db_sa_member) | |
| await session.commit() | |
| logger.info(f"Superadmin {sa_email} created successfully.") | |
| if __name__ == "__main__": | |
| asyncio.run(create_test_user()) | |