2016-10-21 05:46:30 +02:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using Microsoft.eShopOnContainers.WebMVC.Models;
|
2016-10-31 09:25:47 +01:00
|
|
|
|
using Microsoft.CodeAnalysis.Options;
|
|
|
|
|
using Microsoft.Extensions.Options;
|
|
|
|
|
using System.Net.Http;
|
|
|
|
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
2016-11-05 11:09:14 +01:00
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Newtonsoft.Json.Linq;
|
2016-12-07 13:57:31 +01:00
|
|
|
|
using Microsoft.Extensions.Logging;
|
2016-10-21 05:46:30 +02:00
|
|
|
|
|
|
|
|
|
namespace Microsoft.eShopOnContainers.WebMVC.Services
|
|
|
|
|
{
|
|
|
|
|
public class CatalogService : ICatalogService
|
|
|
|
|
{
|
2016-10-31 09:25:47 +01:00
|
|
|
|
private readonly IOptions<AppSettings> _settings;
|
|
|
|
|
private HttpClient _apiClient;
|
|
|
|
|
private readonly string _remoteServiceBaseUrl;
|
2016-11-10 09:13:08 +01:00
|
|
|
|
|
2016-12-07 13:57:31 +01:00
|
|
|
|
public CatalogService(IOptions<AppSettings> settings, ILoggerFactory loggerFactory) {
|
2016-10-31 09:25:47 +01:00
|
|
|
|
_settings = settings;
|
2016-11-07 18:37:11 +01:00
|
|
|
|
_remoteServiceBaseUrl = $"{_settings.Value.CatalogUrl}/api/v1/catalog/";
|
2016-12-07 13:57:31 +01:00
|
|
|
|
|
|
|
|
|
var log = loggerFactory.CreateLogger("catalog service");
|
|
|
|
|
log.LogDebug(settings.Value.CatalogUrl);
|
2016-10-21 05:46:30 +02:00
|
|
|
|
}
|
|
|
|
|
|
2016-11-05 11:09:14 +01:00
|
|
|
|
public async Task<Catalog> GetCatalogItems(int page,int take, int? brand, int? type)
|
2016-10-21 05:46:30 +02:00
|
|
|
|
{
|
2016-11-05 11:09:14 +01:00
|
|
|
|
_apiClient = new HttpClient();
|
|
|
|
|
var itemsQs = $"items?pageIndex={page}&pageSize={take}";
|
|
|
|
|
var filterQs = "";
|
|
|
|
|
|
|
|
|
|
if (brand.HasValue || type.HasValue)
|
2016-11-07 18:37:11 +01:00
|
|
|
|
{
|
|
|
|
|
var brandQs = (brand.HasValue) ? brand.Value.ToString() : "null";
|
|
|
|
|
var typeQs = (type.HasValue) ? type.Value.ToString() : "null";
|
|
|
|
|
filterQs = $"/type/{typeQs}/brand/{brandQs}";
|
|
|
|
|
}
|
2016-11-05 11:09:14 +01:00
|
|
|
|
|
|
|
|
|
var catalogUrl = $"{_remoteServiceBaseUrl}items{filterQs}?pageIndex={page}&pageSize={take}";
|
|
|
|
|
var dataString = await _apiClient.GetStringAsync(catalogUrl);
|
|
|
|
|
var response = JsonConvert.DeserializeObject<Catalog>(dataString);
|
2016-10-31 09:25:47 +01:00
|
|
|
|
|
2016-11-05 11:09:14 +01:00
|
|
|
|
return response;
|
2016-10-31 09:25:47 +01:00
|
|
|
|
}
|
|
|
|
|
|
2016-11-05 11:09:14 +01:00
|
|
|
|
public async Task<IEnumerable<SelectListItem>> GetBrands()
|
2016-10-31 09:25:47 +01:00
|
|
|
|
{
|
2016-11-05 11:09:14 +01:00
|
|
|
|
_apiClient = new HttpClient();
|
|
|
|
|
var url = $"{_remoteServiceBaseUrl}catalogBrands";
|
|
|
|
|
var dataString = await _apiClient.GetStringAsync(url);
|
|
|
|
|
|
2016-10-31 09:25:47 +01:00
|
|
|
|
var items = new List<SelectListItem>();
|
2016-11-07 18:37:11 +01:00
|
|
|
|
items.Add(new SelectListItem() { Value = null, Text = "All", Selected = true });
|
2016-11-05 11:09:14 +01:00
|
|
|
|
|
|
|
|
|
JArray brands = JArray.Parse(dataString);
|
|
|
|
|
foreach (JObject brand in brands.Children<JObject>())
|
|
|
|
|
{
|
|
|
|
|
dynamic item = brand;
|
|
|
|
|
items.Add(new SelectListItem() { Value = item.id, Text = item.brand });
|
|
|
|
|
}
|
2016-10-31 09:25:47 +01:00
|
|
|
|
|
|
|
|
|
return items;
|
|
|
|
|
}
|
|
|
|
|
|
2016-11-05 11:09:14 +01:00
|
|
|
|
public async Task<IEnumerable<SelectListItem>> GetTypes()
|
2016-10-31 09:25:47 +01:00
|
|
|
|
{
|
2016-11-05 11:09:14 +01:00
|
|
|
|
_apiClient = new HttpClient();
|
|
|
|
|
var url = $"{_remoteServiceBaseUrl}catalogTypes";
|
|
|
|
|
var dataString = await _apiClient.GetStringAsync(url);
|
|
|
|
|
|
2016-10-31 09:25:47 +01:00
|
|
|
|
var items = new List<SelectListItem>();
|
2016-11-07 18:37:11 +01:00
|
|
|
|
items.Add(new SelectListItem() { Value = null, Text = "All", Selected = true });
|
2016-11-05 11:09:14 +01:00
|
|
|
|
|
|
|
|
|
JArray brands = JArray.Parse(dataString);
|
|
|
|
|
foreach (JObject brand in brands.Children<JObject>())
|
|
|
|
|
{
|
|
|
|
|
dynamic item = brand;
|
|
|
|
|
items.Add(new SelectListItem() { Value = item.id, Text = item.type });
|
|
|
|
|
}
|
2016-10-31 09:25:47 +01:00
|
|
|
|
|
|
|
|
|
return items;
|
2016-10-21 05:46:30 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|