import asyncio from sqlalchemy import select from app.core.database import AsyncSessionLocal from app.core.security import hash_password from app.models.user import User, Group, UserRole DEMO_GROUPS = [ {"name": "GMG Sede Principale", "description": "Sede principale GMG SPA"}, {"name": "GMG Filiale Nord", "description": "Filiale nord"}, ] DEMO_USERS = [ { "email": "venditore@gmg.it", "full_name": "Mario Venditore", "password": "Demo1234!", "role": UserRole.venditore, "group_index": 0, }, { "email": "valutatore@gmg.it", "full_name": "Luca Valutatore", "password": "Demo1234!", "role": UserRole.valutatore, "group_index": 0, }, { "email": "backoffice@gmg.it", "full_name": "Sara Backoffice", "password": "Demo1234!", "role": UserRole.backoffice, "group_index": 0, }, { "email": "operatore@gmg.it", "full_name": "Carlo Operatore", "password": "Demo1234!", "role": UserRole.operatore_perizie, "group_index": 0, }, { "email": "approvatore@gmg.it", "full_name": "Giulia Approvatore", "password": "Demo1234!", "role": UserRole.approvatore_perizie, "group_index": 0, }, { "email": "admin@gmg.it", "full_name": "Admin GMG", "password": "Admin1234!", "role": UserRole.admin, "group_index": None, }, ] async def run_seed(): async with AsyncSessionLocal() as session: groups = [] for g_data in DEMO_GROUPS: result = await session.execute(select(Group).where(Group.name == g_data["name"])) group = result.scalar_one_or_none() if not group: group = Group(**g_data) session.add(group) await session.flush() print(f" Gruppo creato: {group.name}") groups.append(group) for u_data in DEMO_USERS: result = await session.execute(select(User).where(User.email == u_data["email"])) user = result.scalar_one_or_none() if not user: group_id = groups[u_data["group_index"]].id if u_data["group_index"] is not None else None user = User( email=u_data["email"], full_name=u_data["full_name"], hashed_password=hash_password(u_data["password"]), role=u_data["role"], group_id=group_id, ) session.add(user) print(f" Utente creato: {user.email} ({user.role.value})") await session.commit() print("Seed completato.") if __name__ == "__main__": asyncio.run(run_seed())