import type { EntityManager } from '@mikro-orm/core'; import { Admin } from '../modules/admin/entities/admin.entity'; import { AdminRole } from '../modules/admin/entities/adminRole.entity'; import type { Role } from '../modules/roles/entities/role.entity'; import type { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; import { adminsData } from './data/admins.data'; import { normalizePhone } from '../modules/utils/phone.util'; export class AdminsSeeder { async run(em: EntityManager, rolesMap: Map, restaurantsMap: Map): Promise { for (const adminData of adminsData) { const existingAdmin = await em.findOne(Admin, { phone: adminData.phone }); if (existingAdmin) continue; const role = rolesMap.get(adminData.roleName); if (!role) continue; const restaurant = adminData.restaurantSlug ? restaurantsMap.get(adminData.restaurantSlug) : null; // For restaurant role, restaurant is required if (!restaurant) continue; const admin = em.create(Admin, { phone: normalizePhone(adminData.phone), firstName: adminData.firstName, lastName: adminData.lastName, }); em.persist(admin); // Create AdminRole linking admin to role and restaurant const adminRole = em.create(AdminRole, { admin, role, restaurant: adminData.restaurantSlug ? restaurant : null, }); em.persist(adminRole); admin.roles.add(adminRole); } await em.flush(); } }