Пример #1
0
        public async Task CreateStat(StatXAuthDTO statXAuthDTO, string groupId, BaseStatDTO statDTO)
        {
            try
            {
                var uri = new Uri(StatXBaseApiUrl + $"/groups/{groupId}/stats");

                string json = JsonConvert.SerializeObject(statDTO, Formatting.Indented, new JsonSerializerSettings {
                    ContractResolver = new DynamicContractResolver(statDTO.DynamicJsonIgnoreProperties)
                });

                var response = await _restfulServiceClient.PostAsync(uri, (HttpContent) new StringContent(json), null, GetStatxAPIHeaders(statXAuthDTO));

                var jObject = JObject.Parse(response);

                CheckForExistingErrors(jObject);
            }
            catch (RestfulServiceException exception)
            {
                var    jObject = JObject.Parse(exception.ResponseMessage);
                JToken errorsToken;
                if (jObject.TryGetValue("errors", out errorsToken))
                {
                    if (errorsToken is JArray)
                    {
                        var firstError = (JObject)errorsToken.First;

                        throw new ApplicationException($"StatX request error: {firstError["message"]?.ToString()}");
                    }
                }
            }
        }
Пример #2
0
        public async Task <BaseStatDTO> GetStat(StatXAuthDTO statXAuthDTO, string groupId, string statId)
        {
            try
            {
                var uri      = new Uri($"{StatXBaseApiUrl}/groups/{groupId}/stats/{statId}");
                var response = await _restfulServiceClient.GetAsync(uri, null, GetStatxAPIHeaders(statXAuthDTO));

                var jObject = JObject.Parse(response);

                CheckForExistingErrors(jObject);

                return(ExtractSingleStatFromResponse(jObject));
            }
            catch (RestfulServiceException exception)
            {
                var    jObject = JObject.Parse(exception.ResponseMessage);
                JToken errorsToken;
                if (jObject.TryGetValue("errors", out errorsToken))
                {
                    if (errorsToken is JArray)
                    {
                        var firstError = (JObject)errorsToken.First;

                        throw new ApplicationException($"StatX request error: {firstError["message"]?.ToString()}");
                    }
                }

                return(new BaseStatDTO());
            }
        }
Пример #3
0
        private static Dictionary <string, string> GetStatxAPIHeaders(StatXAuthDTO statXAuthDTO)
        {
            var headers = new Dictionary <string, string>
            {
                { "X-API-KEY", statXAuthDTO.ApiKey },
                { "X-AUTH-TOKEN", statXAuthDTO.AuthToken }
            };

            return(headers);
        }
Пример #4
0
        public async Task <List <StatXGroupDTO> > GetGroups(StatXAuthDTO statXAuthDTO)
        {
            try
            {
                var uri = new Uri(StatXBaseApiUrl + "/groups");

                var response = await _restfulServiceClient.GetAsync(uri, null, GetStatxAPIHeaders(statXAuthDTO));

                var jObject = JObject.Parse(response);

                CheckForExistingErrors(jObject);

                var resultSet = new List <StatXGroupDTO>();

                JToken dataToken;
                if (jObject.TryGetValue("data", out dataToken))
                {
                    if (dataToken is JArray)
                    {
                        resultSet.AddRange(dataToken.Select(item => new StatXGroupDTO()
                        {
                            Id          = item["id"]?.ToString(),
                            Name        = item["name"]?.ToString(),
                            Description = item["description"]?.ToString()
                        }));
                    }
                }

                return(resultSet);
            }
            catch (RestfulServiceException exception)
            {
                var    jObject = JObject.Parse(exception.ResponseMessage);
                JToken errorsToken;
                if (jObject.TryGetValue("errors", out errorsToken))
                {
                    if (errorsToken is JArray)
                    {
                        var firstError = (JObject)errorsToken.First;

                        throw new ApplicationException($"StatX request error: {firstError["message"]?.ToString()}");
                    }
                }

                return(new List <StatXGroupDTO>());
            }
        }
Пример #5
0
        public async Task <StatXGroupDTO> CreateGroup(StatXAuthDTO statXAuthDTO, string groupName)
        {
            try
            {
                var uri = new Uri(StatXBaseApiUrl + "/groups");

                var statGroup = new StatXGroupDTO()
                {
                    Id   = $"grp_{Guid.NewGuid()}",
                    Name = groupName,
                };

                var response = await _restfulServiceClient.PostAsync <StatXGroupDTO>(uri, statGroup, null, GetStatxAPIHeaders(statXAuthDTO));

                var jObject = JObject.Parse(response);

                CheckForExistingErrors(jObject);

                return(JsonConvert.DeserializeObject <StatXGroupDTO>(response));
            }
            catch (RestfulServiceException exception)
            {
                var    jObject = JObject.Parse(exception.ResponseMessage);
                JToken errorsToken;
                if (jObject.TryGetValue("errors", out errorsToken))
                {
                    if (errorsToken is JArray)
                    {
                        var firstError = (JObject)errorsToken.First;

                        throw new ApplicationException($"StatX request error: {firstError["message"]?.ToString()}");
                    }
                }

                return(new StatXGroupDTO());
            }
        }
Пример #6
0
        public async Task UpdateStatValue(StatXAuthDTO statXAuthDTO, string groupId, string statId, Dictionary <string, string> statValues, string title, string notes)
        {
            try
            {
                var uri = new Uri($"{StatXBaseApiUrl}/groups/{groupId}/stats/{statId}");

                //get the stat and look for value
                var currentStat = await GetStat(statXAuthDTO, groupId, statId);

                if (currentStat != null)
                {
                    if (string.IsNullOrEmpty(title))
                    {
                        title = currentStat.Title;
                    }

                    string response = string.Empty;

                    //process stat types that can update multiple items
                    if (currentStat.VisualType == StatTypes.CheckList ||
                        currentStat.VisualType == StatTypes.HorizontalBars)
                    {
                        var statDTO = currentStat as GeneralStatWithItemsDTO;
                        if (statDTO != null)
                        {
                            statDTO.LastUpdatedDateTime      = DateTime.UtcNow;
                            statDTO.NotesLastUpdatedDateTime = DateTime.UtcNow;
                            statDTO.Title = title;
                            statDTO.Notes = notes;

                            var tempItems = new List <StatItemValueDTO>();
                            tempItems.AddRange(statDTO.Items);
                            statDTO.Items.Clear();
                            if (currentStat.VisualType == StatTypes.CheckList)
                            {
                                statDTO.DynamicJsonIgnoreProperties = new string[] { "visualType", "value", "currentIndex" };

                                statDTO.Items.AddRange(statValues.Select(x => new StatItemValueDTO()
                                {
                                    Name    = x.Key,
                                    Checked = string.IsNullOrEmpty(x.Value) ? tempItems.FirstOrDefault(l => l.Name == x.Key).Checked : StatXUtilities.ConvertChecklistItemValue(x.Value)
                                }).ToList());
                            }
                            else
                            {
                                statDTO.DynamicJsonIgnoreProperties = new string[] { "visualType", "checked", "currentIndex" };

                                statDTO.Items.AddRange(statValues.Select(x => new StatItemValueDTO()
                                {
                                    Name  = x.Key,
                                    Value = string.IsNullOrEmpty(x.Value) ? tempItems.FirstOrDefault(l => l.Name == x.Key).Value : x.Value
                                }).ToList());
                            }

                            string json = JsonConvert.SerializeObject(statDTO, Formatting.Indented, new JsonSerializerSettings {
                                ContractResolver = new DynamicContractResolver(statDTO.DynamicJsonIgnoreProperties)
                            });
                            response = await _restfulServiceClient.PutAsync(uri, (HttpContent) new StringContent(json), null, GetStatxAPIHeaders(statXAuthDTO));
                        }
                    }
                    else
                    {
                        var updateStatContent = new GeneralStatDTO
                        {
                            Title = title,
                            Notes = notes,
                            LastUpdatedDateTime      = DateTime.UtcNow,
                            NotesLastUpdatedDateTime = DateTime.UtcNow,
                        };

                        if (currentStat.VisualType == StatTypes.PickList)
                        {
                            int currentIndex = 0;
                            int.TryParse(statValues.First().Value, out currentIndex);
                            updateStatContent.CurrentIndex = currentIndex;
                            updateStatContent.DynamicJsonIgnoreProperties = new[] { "visualType", "value" };
                        }
                        else
                        {
                            updateStatContent.Value = statValues.First().Value;
                            updateStatContent.DynamicJsonIgnoreProperties = new[] { "visualType", "currentIndex" };
                        }

                        string json = JsonConvert.SerializeObject(updateStatContent, Formatting.Indented, new JsonSerializerSettings {
                            ContractResolver = new DynamicContractResolver(updateStatContent.DynamicJsonIgnoreProperties)
                        });
                        response = await _restfulServiceClient.PutAsync(uri, (HttpContent) new StringContent(json), null, GetStatxAPIHeaders(statXAuthDTO));
                    }

                    var jObject = JObject.Parse(response);

                    CheckForExistingErrors(jObject, true);
                }
            }
            catch (RestfulServiceException exception)
            {
                var    jObject = JObject.Parse(exception.ResponseMessage);
                JToken errorsToken;
                if (jObject.TryGetValue("errors", out errorsToken))
                {
                    if (errorsToken is JArray)
                    {
                        var firstError = (JObject)errorsToken.First;

                        throw new ApplicationException($"StatX request error: {firstError["message"]?.ToString()}");
                    }
                }
            }
        }