using Insight.Database; using PlanTempus.Core; using PlanTempus.Core.Sql; namespace PlanTempus.Components.Users.Create { public class CreateUserHandler(IDatabaseOperations databaseOperations, ISecureTokenizer secureTokenizer) { public async Task Handle(CreateUserCommand command) { using var db = databaseOperations.CreateScope(nameof(CreateUserHandler)); try { var sql = @" INSERT INTO system.users(email, password_hash, security_stamp, email_confirmed, access_failed_count, lockout_enabled, is_active) VALUES(@Email, @PasswordHash, @SecurityStamp, @EmailConfirmed, @AccessFailedCount, @LockoutEnabled, @IsActive) RETURNING id, created_at, email, is_active"; var data = await db.Connection.QuerySqlAsync(sql, new { Email = command.Email, PasswordHash = secureTokenizer.TokenizeText(command.Password), SecurityStamp = Guid.NewGuid().ToString("N"), EmailConfirmed = false, AccessFailedCount = 0, LockoutEnabled = false, IsActive = command.IsActive, }); db.Success(); return data.First(); } catch (Exception ex) { db.Error(ex); throw; } } } }