public async Task <IClientAccount> GetByIdAsync(string id)
        {
            var partitionKey = ClientAccountEntity.GeneratePartitionKey();
            var rowKey       = ClientAccountEntity.GenerateRowKey(id);

            return(await _tradersTableStorage.GetDataAsync(partitionKey, rowKey));
        }
        public async Task <IClientAccount> RegisterAsync(IClientAccount clientAccount, string password)
        {
            var newEntity   = ClientAccountEntity.CreateNew(clientAccount, password);
            var indexEntity = AzureIndex.Create(IndexEmail, newEntity.Email, newEntity);

            await _emailIndices.InsertAsync(indexEntity);

            await _tradersTableStorage.InsertAsync(newEntity);

            return(newEntity);
        }
        public Task ChangePassword(string clientId, string newPassword)
        {
            var partitionKey = ClientAccountEntity.GeneratePartitionKey();
            var rowKey       = ClientAccountEntity.GenerateRowKey(clientId);

            return(_tradersTableStorage.ReplaceAsync(partitionKey, rowKey, itm =>
            {
                itm.SetPassword(newPassword);
                return itm;
            }));
        }
        public static ClientAccountEntity CreateNew(IClientAccount clientAccount, string password)
        {
            var result = new ClientAccountEntity
            {
                PartitionKey = GeneratePartitionKey(),
                RowKey = Guid.NewGuid().ToString(),
                Email = clientAccount.Email.ToLower(),
                Phone = clientAccount.Phone,
                Registered = clientAccount.Registered
            };

            result.SetPassword(password);

            return result;
        }
        public static ClientAccountEntity CreateNew(IClientAccount clientAccount, string password)
        {
            var result = new ClientAccountEntity
            {
                PartitionKey = GeneratePartitionKey(),
                RowKey       = Guid.NewGuid().ToString(),
                Email        = clientAccount.Email.ToLower(),
                Phone        = clientAccount.Phone,
                Registered   = clientAccount.Registered
            };

            result.SetPassword(password);

            return(result);
        }