public IResult CreateUser(UserViewModel userViewModel)
        {
            var result = new Result
            {
                Operation = Operation.Create,
                Status    = Status.Success
            };

            try
            {
                var duplicateUserName = _userRepository.GetFirstOrDefault(x => (x.IsActive && !x.IsDeleted) && (x.UserName == userViewModel.UserName));
                var duplicateEmail    = _userRepository.GetFirstOrDefault(x => (x.IsActive && !x.IsDeleted) && (x.Email == userViewModel.Email));
                if (duplicateUserName != null)
                {
                    result.Status  = Status.Fail;
                    result.Message = UserStatusNotification.DuplicateUserName;
                    result.Body    = null;
                    return(result);
                }
                else if (duplicateEmail != null)
                {
                    result.Status  = Status.Fail;
                    result.Message = UserStatusNotification.DuplicateEmail;
                    result.Body    = null;
                    return(result);
                }
                else
                {
                    var userModel = new Users();
                    userModel.MapFromViewModel(userViewModel, (ClaimsIdentity)_principal.Identity);

                    UserRoles userRole = new UserRoles();
                    userRole.RoleId = userViewModel.RoleId;
                    userRole.Role   = _roleRepository.GetByID(userViewModel.RoleId);
                    userRole.MapAuditColumns((ClaimsIdentity)_principal.Identity);
                    _userRepository.CreateUser(userModel, userRole);
                    userViewModel.Password = GenericHelper.DecryptPassword(userViewModel.Password);
                    if (userModel.UserId != Guid.Empty)
                    {
                        MailDetailModel mailDetail = new MailDetailModel();
                        mailDetail.EmailId     = userModel.Email;
                        mailDetail.Subject     = "Registration Confirmation";
                        mailDetail.Template    = TemplateType.UserRegistration;
                        mailDetail.MessageBody = userViewModel;
                        GenericHelper.Send(mailDetail, _configuration, _hostingEnvironment);
                    }
                    result.Body = userModel.UserId;
                }
            }
            catch (Exception e)
            {
                result.Message = e.Message;
                result.Status  = Status.Error;
            }
            return(result);
        }