using System.ComponentModel.DataAnnotations; using Bit.Core.Entities; using Bit.Core.Repositories; using Bit.Seeder.Factories; using Bit.Seeder.Services; using Microsoft.AspNetCore.Identity; namespace Bit.Seeder.Scenes; public struct SingleUserSceneResult { public Guid UserId { get; init; } public string Kdf { get; init; } public int KdfIterations { get; init; } public string Key { get; init; } public string PublicKey { get; init; } public string PrivateKey { get; init; } public string ApiKey { get; init; } } /// /// Creates a single user using the provided account details. /// public class SingleUserScene( IPasswordHasher passwordHasher, IUserRepository userRepository, IManglerService manglerService) : IScene { public class Request { [Required] public required string Email { get; set; } public bool EmailVerified { get; set; } = false; public bool Premium { get; set; } = false; } public async Task> SeedAsync(Request request) { // Pass service to factory - factory will call Mangle() var user = UserSeeder.Create( request.Email, passwordHasher, manglerService, request.EmailVerified, request.Premium); await userRepository.CreateAsync(user); return new SceneResult( result: new SingleUserSceneResult { UserId = user.Id, Kdf = user.Kdf.ToString(), KdfIterations = user.KdfIterations, Key = user.Key!, PublicKey = user.PublicKey!, PrivateKey = user.PrivateKey!, ApiKey = user.ApiKey!, }, mangleMap: manglerService.GetMangleMap()); } }