using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http; 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.Threading.Tasks; using WebMVC.Infrastructure; namespace Microsoft.eShopOnContainers.WebMVC.Services { public class CatalogService : ICatalogService { private readonly IOptionsSnapshot _settings; private readonly IHttpClient _apiClient; private readonly ILogger _logger; private readonly string _remoteServiceBaseUrl; public CatalogService(IOptionsSnapshot settings, IHttpClient httpClient, ILogger logger) { _settings = settings; _apiClient = httpClient; _logger = logger; _remoteServiceBaseUrl = $"{_settings.Value.CatalogUrl}/api/v1/catalog/"; } public async Task GetCatalogItems(int page, int take, int? brand, int? type) { var allcatalogItemsUri = API.Catalog.GetAllCatalogItems(_remoteServiceBaseUrl, page, take, brand, type); var dataString = await _apiClient.GetStringAsync(allcatalogItemsUri); var response = JsonConvert.DeserializeObject(dataString); return response; } public async Task> GetBrands() { var getBrandsUri = API.Catalog.GetAllBrands(_remoteServiceBaseUrl); var dataString = await _apiClient.GetStringAsync(getBrandsUri); var items = new List(); items.Add(new SelectListItem() { Value = null, Text = "All", Selected = true }); var brands = JArray.Parse(dataString); 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 getTypesUri = API.Catalog.GetAllTypes(_remoteServiceBaseUrl); var dataString = await _apiClient.GetStringAsync(getTypesUri); var items = new List(); items.Add(new SelectListItem() { Value = null, Text = "All", Selected = true }); var brands = JArray.Parse(dataString); foreach (var brand in brands.Children()) { items.Add(new SelectListItem() { Value = brand.Value("id"), Text = brand.Value("type") }); } return items; } } }