using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.eShopOnContainers.WebMVC.ViewModels; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using WebMVC.Infrastructure; namespace Microsoft.eShopOnContainers.WebMVC.Services { public class CatalogService : ICatalogService { private readonly IOptions _settings; private readonly HttpClient _httpClient; private readonly ILogger _logger; private readonly string _remoteServiceBaseUrl; public CatalogService(HttpClient httpClient, ILogger logger, IOptions settings) { _httpClient = httpClient; _settings = settings; _logger = logger; _remoteServiceBaseUrl = $"{_settings.Value.PurchaseUrl}/api/v1/c/catalog/"; } public async Task GetCatalogItems(int page, int take, int? brand, int? type) { var uri = API.Catalog.GetAllCatalogItems(_remoteServiceBaseUrl, page, take, brand, type); var responseString = await _httpClient.GetStringAsync(uri); var catalog = JsonConvert.DeserializeObject(responseString); return catalog; } public async Task> GetBrands() { var uri = API.Catalog.GetAllBrands(_remoteServiceBaseUrl); var responseString = await _httpClient.GetStringAsync(uri); var items = new List { new SelectListItem() { Value = null, Text = "All", Selected = true } }; var brands = JArray.Parse(responseString); foreach (var brand in brands.Children()) { items.Add(new SelectListItem() { Value = brand.Value("id"), Text = brand.Value("brand") }); } return items; } public async Task> GetTypes() { var uri = API.Catalog.GetAllTypes(_remoteServiceBaseUrl); var responseString = await _httpClient.GetStringAsync(uri); var items = new List(); items.Add(new SelectListItem() { Value = null, Text = "All", Selected = true }); var brands = JArray.Parse(responseString); foreach (var brand in brands.Children()) { items.Add(new SelectListItem() { Value = brand.Value("id"), Text = brand.Value("type") }); } return items; } } }