/// <summary>
        /// Authenticate a user name and password
        /// </summary>
        /// <param name="email"></param>
        /// <param name="password"></param>
        /// <returns>User account if authenticated, otherwise null</returns>
        public AccountData Authenticate(string email, string password)
        {
            var authenRequest = new AuthenticationRequest()
            {
                PrincipalName     = email,
                PrincipalPassword = password
            };
            var account = AccountDataRepo.Read(authenRequest);

            return(account);
        }
        /// <summary>
        /// Append attribute to base item when it is loaded
        /// </summary>
        /// <param name="item">Base item just read from datastore</param>
        public void OnItemRead(Item item)
        {
            var characterManager = ModuleManager.GetManager <IAccountCharacterManager>();
            var characterData    = characterManager.ReadByCharacter(item.Id);

            if (characterData != null)
            {
                var accountData = AccountDataRepo.Read(characterData.AccountId);
//                accountData.Password = null;
                item.Data.Add(accountData);
            }
        }
        /// <summary>
        /// Delete an account and all associated account characters
        /// </summary>
        /// <param name="accountId"></param>
        public void Delete(Guid accountId)
        {
            var accountCharacterDatas = ModuleManager.GetManager <IAccountCharacterManager>()
                                        .ReadByAccount(accountId);
            var accountCharacterItemIds = accountCharacterDatas.Select(x => x.CharacterItemId).ToList();

            if (accountCharacterItemIds.Count > 0)
            {
                ModuleManager.GetManager <IAccountCharacterManager>().Delete(accountCharacterItemIds);
            }
            var accountData = AccountDataRepo.Read(accountId);

            AccountDataRepo.Delete(accountData);
        }