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()}"); } } } }
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()); } }
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); }
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>()); } }
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()); } }
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()}"); } } } }