public async Task <RocketChatUserDto> GetUserByEmailAsync(GetRocketChatUserByEmailInputDto input)
 {
     return(await UserCache.GetOrAddAsync(
                CalculateUserKey(input.Email),
                () => GetUserByEmailFromApiAsync(input)
                ));
 }
        async Task <RocketChatUserDto> GetUserByEmailFromApiAsync(GetRocketChatUserByEmailInputDto input)
        {
            // To query data on the rocket chat API, we have to use the mongo-db query operators
            // See https://stackoverflow.com/questions/10700921/case-insensitive-search-with-in
            const string queryTemplate = "query={\"emails\":{\"$elemMatch\": {\"address\" : {\"$regex\":\"{0}\", \"$options\": \"i\"}}}}";

            using (var client = HttpClientFactory.CreateClient("RocketChat"))
            {
                await Authenticator.AuthenticateAsync(client);

                var queryParameter = string.Format(queryTemplate, input.Email);
                var response       = await client.GetFromJsonAsync <UserListResponse>($"api/v1/users.list?{queryParameter}");

                return(response.Users.FirstOrDefault());
            }
        }