/// <summary>
        /// Internals of handling message
        /// </summary>
        /// <param name="message">The message.</param>
        /// <returns>User gateways model</returns>
        public async Task <GetUserGatewaysResponse> Handle(GetUserGatewaysRequest message)
        {
            var userInstallationsResponse = await GetUserInstallations(message);

            if (userInstallationsResponse.StatusCode == HttpStatusCode.NotFound)
            {
                return(new GetUserGatewaysResponse()
                {
                    ErrorModel = new ErrorModel(ErrorType.NotFound)
                });
            }

            var userInstallations = userInstallationsResponse.Data;

            var gatewaysResponse = await GetGatewaysDetails(userInstallations);

            var gateways = Mapper.Map <IEnumerable <Gateway> >(gatewaysResponse.Data);

            var response = new GetUserGatewaysResponse()
            {
                Data = gateways
            };

            return(response);
        }
        /// <summary>
        /// Gets the user installations.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <returns>List of gateways details</returns>
        private static Task <IRestResponse <List <int> > > GetUserInstallations(GetUserGatewaysRequest message)
        {
            var restClient = new RestClient(ConfigurationManager.AppSettings["ServiceEndpoints:Users"]);

            var userInstallationsRequest = new RestRequest("users/{id}/installations", Method.GET);

            userInstallationsRequest.AddUrlSegment("id", message.Id.ToString());

            return(restClient.ExecuteTaskAsync <List <int> >(userInstallationsRequest));
        }
        public async Task <IHttpActionResult> GetGateways([FromUri] int id)
        {
            var idPrincipal = this.RequestContext.Principal as IdPrincipal;

            if (idPrincipal.UserId != id)
            {
                return(this.CreateHttpActionResult(new GetUserResponse()
                {
                    ErrorModel = new ErrorModel(ErrorType.Unauthorized)
                }));
            }

            var request = new GetUserGatewaysRequest()
            {
                Id = id
            };

            var responseModel = await this.getGatewaysHandler.Handle(request);

            return(this.CreateHttpActionResult(responseModel));
        }