public async Task <LoadStatusNotificationsData> GetLoadStatusNotificationsAsync()
        {
            const string mediaType = "application/json";

            httpClient.DefaultRequestHeaders.Clear();
            httpClient.DefaultRequestHeaders.Accept.Clear();
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(mediaType));
            httpClient.DefaultRequestHeaders.Add("Authorization", userContext.Token);

            var url = $"{config.GetValue<string>("MobileApiAddress")}t2g/api/Notification/OnStatusChangeV2/LSShipper";

            var responseMessage = await httpClient.GetAsync(url, default(CancellationToken));

            var responseString = await responseMessage.Content.ReadAsStringAsync();

            var response = JsonConvert.DeserializeObject <VisibilityResponseModel <GetLoadStatusNotificationResponseModel> >(responseString);

            var result = mapper.Map <LoadStatusNotificationsData>(response.ResponsePayload);

            if (result == null)
            {
                // user hasn't subscribed to any notifications
                result = new LoadStatusNotificationsData();
            }

            return(result);
        }
        public async Task <IActionResult> UpdateLoadStatusNotifications([FromBody] LoadStatusNotificationsData notificationsData)
        {
            await securityService.GuardActionAsync(SecurityActions.Loadshop_Ui_Profile_LoadStatusNotifications);

            var response = await visibilityProxyService.UpdateLoadStatusNotificationsAsync(notificationsData);

            if (response.Successful)
            {
                return(Success(notificationsData));
            }
            else
            {
                var problemDetails = new ValidationProblemDetails(response.ModelState)
                {
                    Title    = "Error updating Load status notifications",
                    Detail   = "One or more errors occurred when updating the load status notifications.  See form for error details",
                    Status   = (int)HttpStatusCode.BadRequest,
                    Instance = $"urn:kbxl:error:{Guid.NewGuid()}"
                };
                return(BadRequest(problemDetails));
            }
        }
        public async Task <SaveLoadStatusNotificationsResponse> UpdateLoadStatusNotificationsAsync(LoadStatusNotificationsData notificationsData)
        {
            const string mediaType = "application/json";

            httpClient.DefaultRequestHeaders.Clear();
            httpClient.DefaultRequestHeaders.Accept.Clear();
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(mediaType));
            httpClient.DefaultRequestHeaders.Add("Authorization", userContext.Token);

            var url = $"{config.GetValue<string>("MobileApiAddress")}t2g/api/Notification/OnStatusChange/LSShipper";

            var payload = mapper.Map <VisibilityNotificationRegistrationModel>(notificationsData);

            payload.Sender = LoadshopSenderCode;
            // currently don't support these
            payload.IsMobilePush = false;
            payload.IsWebPush    = false;
            if (!string.IsNullOrEmpty(payload.PhoneNumber))
            {
                payload.PhoneNumber = payload.PhoneNumber.Replace("(", string.Empty);
                payload.PhoneNumber = payload.PhoneNumber.Replace(")", string.Empty);
                payload.PhoneNumber = payload.PhoneNumber.Replace("-", string.Empty);
                payload.PhoneNumber = payload.PhoneNumber.Replace(" ", string.Empty);
                payload.PhoneNumber = payload.PhoneNumber.Trim();
            }
            var formdata = JsonConvert.SerializeObject(payload, new JsonSerializerSettings()
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            });

            var jsonContent = new StringContent(formdata, Encoding.UTF8, mediaType);

            var responseMessage = await httpClient.PostAsync(url, jsonContent, default(CancellationToken));

            var responseString = await responseMessage.Content.ReadAsStringAsync();

            var response = JsonConvert.DeserializeObject <VisibilityResponseModel <bool> >(responseString);

            var result = new SaveLoadStatusNotificationsResponse()
            {
                Successful = response.Successful
            };

            if (!result.Successful)
            {
                foreach (var error in response.Errors)
                {
                    result.AddError(ErrorPrefix, error.Message);
                }
            }

            return(result);
        }