public async Task <RepositoryResult <SearchProjectsD365PageModel> > SearchProject(string search, ProjectStatusEnum status, bool isAscending = true, uint pageSize = 10, uint pageNumber = 1) { var sanitizedSearch = _fetchXmlSanitizer.Sanitize(search); var fetchXml = BuildFetchXMLQuery(sanitizedSearch, status, isAscending); var encodedFetchXml = WebUtility.UrlEncode(fetchXml); var url = $"{_route}?fetchXml={encodedFetchXml}"; var response = await _client.GetAsync(url); var responseContent = await response.Content?.ReadAsStringAsync(); var responseStatusCode = response.StatusCode; if (response.IsSuccessStatusCode) { var results = await response.Content.ReadAsStringAsync(); var castedResults = JsonConvert.DeserializeObject <ResultSet <SearchProjectsD365Model> >(results); var distinctResults = castedResults.Items.Distinct().ToList(); var totalPages = distinctResults.Count == 0 ? 0 : (distinctResults.Count / (int)pageSize) + 1; var pageResults = distinctResults .Skip(((int)pageNumber - 1) * (int)pageSize) .Take((int)pageSize) .ToList(); var pageResult = new SearchProjectsD365PageModel { CurrentPage = (int)pageNumber, TotalPages = totalPages, Projects = pageResults }; return(new RepositoryResult <SearchProjectsD365PageModel> { Result = pageResult }); } //At this point, log the error and configure the repository result to inform the caller that the repo failed _logger.LogError(RepositoryErrorMessages.RepositoryErrorLogFormat, responseStatusCode, responseContent); return(new RepositoryResult <SearchProjectsD365PageModel> { Error = new RepositoryResultBase.RepositoryError { StatusCode = responseStatusCode, ErrorMessage = responseContent } }); }
public async Task <RepositoryResult <GetTrustsModel> > GetTrustById(Guid id) { var url = _urlBuilder.BuildRetrieveOneUrl(Route, id); var response = await _client.GetAsync(url); var responseContent = await response.Content?.ReadAsStringAsync(); var responseStatusCode = response.StatusCode; if (responseStatusCode == System.Net.HttpStatusCode.NotFound) { return(new RepositoryResult <GetTrustsModel> { Result = null }); } if (response.IsSuccessStatusCode) { var castedResult = JsonConvert.DeserializeObject <GetTrustsD365Model>(responseContent); //If this establishment is not a trust, return null. The controller will return a Not Found response var allowedEstablishementTypeIds = new List <string>() { EstablishmentType.MultiAcademyTrustGuid, EstablishmentType.SingleAcademyTrustGuid, EstablishmentType.TrustGuid }; if (!allowedEstablishementTypeIds.Contains(castedResult.EstablishmentTypeId.ToString() .ToUpperInvariant())) { return(new RepositoryResult <GetTrustsModel> { Result = null }); } var mappedResult = _getTrustMapper.Map(castedResult); return(new RepositoryResult <GetTrustsModel> { Result = mappedResult }); } //At this point, log the error and configure the repository result to inform the caller that the repo failed _logger.LogError(RepositoryErrorMessages.RepositoryErrorLogFormat, responseStatusCode, responseContent); return(new RepositoryResult <GetTrustsModel> { Error = new RepositoryResultBase.RepositoryError { StatusCode = responseStatusCode, ErrorMessage = responseContent } }); }
public async Task <RepositoryResult <GetAcademiesModel> > GetAcademyById(Guid id) { var url = _urlBuilder.BuildRetrieveOneUrl(Route, id); var response = await _client.GetAsync(url); var responseContent = await response.Content?.ReadAsStringAsync(); var responseStatusCode = response.StatusCode; if (responseStatusCode == System.Net.HttpStatusCode.NotFound) { return(new RepositoryResult <GetAcademiesModel> { Result = null }); } if (response.IsSuccessStatusCode) { var castedResult = JsonConvert.DeserializeObject <GetAcademiesD365Model>(responseContent); if (castedResult?.ParentTrustId == null) { return(new RepositoryResult <GetAcademiesModel> { Result = null }); } var mappedResult = _getAcademies365Mapper.Map(castedResult); return(new RepositoryResult <GetAcademiesModel> { Result = mappedResult }); } //At this point, log the error and configure the repository result to inform the caller that the repo failed _logger.LogError(RepositoryErrorMessages.RepositoryErrorLogFormat, responseStatusCode, responseContent); return(new RepositoryResult <GetAcademiesModel> { Error = new RepositoryResultBase.RepositoryError { StatusCode = responseStatusCode, ErrorMessage = responseContent } }); }
public async Task <RepositoryResult <SearchProjectsPageModel> > SearchProject(string search, Models.Upstream.Enums.ProjectStatusEnum?status, bool isAscending = true, uint pageSize = 10, uint pageNumber = 1) { var sanitizedSearch = _fetchXmlSanitizer.Sanitize(search); ProjectStatusEnum projectStatus = default; if (status.HasValue) { if (MappingDictionaries.ProjecStatusEnumMap.TryGetValue(status.Value, out var internalStatus)) { projectStatus = internalStatus; } else { //If project status cannot be mapped to D365 Project Status, return an error return(new RepositoryResult <SearchProjectsPageModel>() { Error = new RepositoryResultBase.RepositoryError() { ErrorMessage = "Project Status not recognised", StatusCode = HttpStatusCode.BadRequest } }); } } var fetchXml = BuildFetchXMLQuery(sanitizedSearch, projectStatus, isAscending); var encodedFetchXml = WebUtility.UrlEncode(fetchXml); var url = $"{Route}?fetchXml={encodedFetchXml}"; var response = await _client.GetAsync(url); var responseContent = await response.Content?.ReadAsStringAsync(); var responseStatusCode = response.StatusCode; if (response.IsSuccessStatusCode) { var results = await response.Content.ReadAsStringAsync(); var castedResults = JsonConvert.DeserializeObject <ResultSet <SearchProjectsD365Model> >(results); var distinctResults = castedResults.Items.Distinct().ToList(); var totalPages = distinctResults.Count == 0 ? 0 : (distinctResults.Count / (int)pageSize) + 1; var pageResults = distinctResults .Skip(((int)pageNumber - 1) * (int)pageSize) .Take((int)pageSize) .ToList(); var pageResult = new SearchProjectsD365PageModel { CurrentPage = (int)pageNumber, TotalPages = totalPages, Projects = pageResults }; var mappedPageResult = _searchProjectsMapper.Map(pageResult); return(new RepositoryResult <SearchProjectsPageModel> { Result = mappedPageResult }); } //At this point, log the error and configure the repository result to inform the caller that the repo failed _logger.LogError(RepositoryErrorMessages.RepositoryErrorLogFormat, responseStatusCode, responseContent); return(new RepositoryResult <SearchProjectsPageModel> { Error = new RepositoryResultBase.RepositoryError { StatusCode = responseStatusCode, ErrorMessage = responseContent } }); }