118 lines
3.6 KiB
C#
Raw Normal View History

2016-11-02 20:41:12 +01:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.eShopOnContainers.WebMVC.Models;
using Microsoft.AspNetCore.Http;
using System.Net.Http;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
2016-11-02 20:41:12 +01:00
namespace Microsoft.eShopOnContainers.WebMVC.Services
{
public class BasketService : IBasketService
{
private readonly IOptions<AppSettings> _settings;
private HttpClient _apiClient;
private readonly string _remoteServiceBaseUrl;
2016-11-02 20:41:12 +01:00
public BasketService(IOptions<AppSettings> settings)
2016-11-02 20:41:12 +01:00
{
_settings = settings;
_remoteServiceBaseUrl = _settings.Value.BasketUrl;
2016-11-02 20:41:12 +01:00
}
public async Task<Basket> GetBasket(ApplicationUser user)
2016-11-02 20:41:12 +01:00
{
_apiClient = new HttpClient();
var basketUrl = $"{_remoteServiceBaseUrl}/{user.Id.ToString()}";
var dataString = await _apiClient.GetStringAsync(basketUrl);
var response = JsonConvert.DeserializeObject<Basket>(dataString);
if (response == null)
{
response = new Basket()
{
BuyerId = user.Id
};
}
2016-11-02 20:41:12 +01:00
return response;
2016-11-02 20:41:12 +01:00
}
public async Task<Basket> UpdateBasket(Basket basket)
2016-11-02 20:41:12 +01:00
{
_apiClient = new HttpClient();
var basketUrl = _remoteServiceBaseUrl;
StringContent content = new StringContent(JsonConvert.SerializeObject(basket), System.Text.Encoding.UTF8, "application/json");
var response = await _apiClient.PostAsync(basketUrl, content);
return basket;
2016-11-02 20:41:12 +01:00
}
public async Task<Basket> SetQuantities(ApplicationUser user, Dictionary<string, int> quantities)
2016-11-02 20:41:12 +01:00
{
var basket = await GetBasket(user);
2016-11-02 20:41:12 +01:00
basket.Items.ForEach(x =>
{
var quantity = quantities.Where(y => y.Key == x.Id).FirstOrDefault();
if (quantities.Where(y => y.Key == x.Id).Count() > 0)
x.Quantity = quantity.Value;
});
return basket;
}
public Order MapBasketToOrder(Basket basket)
{
var order = new Order()
{
Id = Guid.NewGuid().ToString(),
BuyerId = basket.BuyerId
};
basket.Items.ForEach(x =>
{
order.OrderItems.Add(new OrderItem()
{
ProductId = x.ProductId,
OrderId = order.Id,
PictureUrl = x.PictureUrl,
ProductName = x.ProductName,
Quantity = x.Quantity,
UnitPrice = x.UnitPrice
});
});
return order;
}
public async Task AddItemToBasket(ApplicationUser user, BasketItem product)
{
Basket basket = await GetBasket(user);
if (basket == null)
{
basket = new Basket()
{
BuyerId = user.Id,
//Id = Guid.NewGuid().ToString(),
Items = new List<Models.BasketItem>()
};
}
basket.Items.Add(product);
await UpdateBasket(basket);
}
public async Task CleanBasket(ApplicationUser user)
{
_apiClient = new HttpClient();
var basketUrl = $"{_remoteServiceBaseUrl}/{user.Id.ToString()}";
var response = await _apiClient.DeleteAsync(basketUrl);
//CCE: response status code...
}
2016-11-02 20:41:12 +01:00
}
}