using Bit.Core.Entities; using Bit.Infrastructure.EntityFramework.Repositories; using Bit.Seeder.Factories; using LinqToDB.EntityFrameworkCore; using Microsoft.AspNetCore.Identity; namespace Bit.Seeder.Recipes; public class OrganizationWithUsersRecipe(DatabaseContext db, IPasswordHasher passwordHasher) { public Guid Seed(string name, int users, string domain) { var (organization, orgKey) = OrganizationSeeder.CreateEnterprise(name, domain, users); var (user, _) = UserSeeder.CreateUser(passwordHasher, $"admin@{domain}"); var orgUser = organization.CreateOrganizationUser(user, orgKey); var additionalUsers = new List(); var additionalOrgUsers = new List(); for (var i = 0; i < users; i++) { var (additionalUser, _) = UserSeeder.CreateUser(passwordHasher, $"user{i}@{domain}"); additionalUsers.Add(additionalUser); additionalOrgUsers.Add(organization.CreateOrganizationUser(additionalUser, orgKey)); } db.Add(organization); db.Add(user); db.Add(orgUser); db.SaveChanges(); // Use LinqToDB's BulkCopy for significant better performance db.BulkCopy(additionalUsers); db.BulkCopy(additionalOrgUsers); return organization.Id; } }