using Bit.Seeder.Factories; using Bit.Seeder.Pipeline; namespace Bit.Seeder.Steps; /// /// Creates folders with explicit names for the first user, registering them as named folders for preset-driven assignments. /// internal sealed class CreateNamedFoldersStep(List folderNames) : IStep { public void Execute(SeederContext context) { var userDigest = context.Registry.UserDigests[0]; var emailPrefix = context.Registry.UserEmailPrefixToUserId .First(kvp => kvp.Value == userDigest.UserId).Key; var namedFolders = new Dictionary(StringComparer.OrdinalIgnoreCase); var folderIds = new List(folderNames.Count); foreach (var folderName in folderNames) { if (namedFolders.ContainsKey(folderName)) { throw new InvalidOperationException( $"Duplicate folder name '{folderName}' in folderNames list."); } var folder = FolderSeeder.Create(userDigest.UserId, userDigest.SymmetricKey, folderName); context.Folders.Add(folder); namedFolders[folderName] = folder.Id; folderIds.Add(folder.Id); } context.Registry.UserNamedFolders[emailPrefix] = namedFolders; context.Registry.UserFolderIds[userDigest.UserId] = folderIds; } }