public async Task <Dictionary <string, object> > CrearUsuario(UsuarioDto usuarioNuevo) { httpStatusCode = HttpStatusCode.OK; resultado = Resultado.Success; mensaje = ""; Usuario usuario = null; if (!usuarioNuevo.IsNull()) { if (await ValidaNuevo(usuarioNuevo).ConfigureAwait(true)) { if (usuarioNuevo.Contrasena.BuildHashString(out byte[] contrhash, out byte[] contrsalt, out mensaje)) { // Mapear datos de DTO al modelo. usuario = usuarioNuevo.Map <Usuario>(); // Obtener fecha de registro. usuario.FechaRegist = DateTime.Now; // Inicializar la contraseña con Hash y el Salt. usuario.ContrasHash = contrhash; usuario.ContrasSalt = contrsalt; // Generar nuevo código de opción. string maxcod = await _repoWrapper.Usuario.MaxIdAsync(); string newcod = (int.Parse(maxcod, CultureInfo.InvariantCulture) + 1).ToString().Trim().PadLeft(15, '0'); usuario.CodUsuario = newcod; // Buscar en parámetros generales el código de tipo de cambio que corresponde a activación de cuenta. ParamGenUsu paramGenUsu = await _repoWrapper.ParamGenUsu.GetParamGenUsuAsync(); // Incicializar datos para la solicitud de activación de cuenta. _ = CreaCambioRestringido(usuario, paramGenUsu.CodActiCuenta, out string randomCode); // Salvar datos de usuario. _repoWrapper.Usuario.Create(usuario); if (await _repoWrapper.SaveAsync() > 0) { // Enviar correo para activar cuenta. EnviarCorreo(usuario, randomCode, 1); mensaje = "Usuario creado con éxito."; } else { usuario = null; httpStatusCode = HttpStatusCode.InternalServerError; resultado = Resultado.Error; mensaje = "Inconsistencia al salvar usuario."; } } else { usuario = null; httpStatusCode = HttpStatusCode.BadRequest; resultado = Resultado.Error; } } } else { usuario = null; httpStatusCode = HttpStatusCode.BadRequest; resultado = Resultado.Error; mensaje = "Datos de usuario incorrectos."; } _resultService.AddValue("StatusCode", httpStatusCode); _resultService.AddValue(resultado, mensaje); if (resultado == Resultado.Success) { usuarioNuevo = usuario.Map <UsuarioDto>(); _resultService.AddValue("usuario", usuarioNuevo); } return(_resultService.GetProperties()); }