adding the start to a coupon service, pushing to test
This commit is contained in:
parent
1cd2d41b43
commit
37715c3e27
@ -13,6 +13,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Controllers
|
||||
{
|
||||
private IOrderingService _orderSvc;
|
||||
private IBasketService _basketSvc;
|
||||
private ICouponService _couponSvc;
|
||||
private readonly IIdentityParser<ApplicationUser> _appUserParser;
|
||||
public OrderController(IOrderingService orderSvc, IBasketService basketSvc, IIdentityParser<ApplicationUser> appUserParser)
|
||||
{
|
||||
@ -41,7 +42,6 @@ namespace Microsoft.eShopOnContainers.WebMVC.Controllers
|
||||
{
|
||||
var user = _appUserParser.Parse(HttpContext.User);
|
||||
var basket = _orderSvc.MapOrderToBasket(model);
|
||||
|
||||
await _basketSvc.Checkout(basket);
|
||||
|
||||
//Redirect to historic list.
|
||||
|
@ -18,12 +18,14 @@ namespace Microsoft.eShopOnContainers.WebMVC.Services
|
||||
private readonly ILogger<BasketService> _logger;
|
||||
private readonly string _basketByPassUrl;
|
||||
private readonly string _purchaseUrl;
|
||||
private ICouponService _couponSvc;
|
||||
|
||||
public BasketService(HttpClient httpClient, IOptions<AppSettings> settings, ILogger<BasketService> logger)
|
||||
public BasketService(HttpClient httpClient, IOptions<AppSettings> settings, ILogger<BasketService> logger, ICouponService couponService)
|
||||
{
|
||||
_apiClient = httpClient;
|
||||
_settings = settings;
|
||||
_logger = logger;
|
||||
_couponSvc = couponService;
|
||||
|
||||
_basketByPassUrl = $"{_settings.Value.PurchaseUrl}/b/api/v1/basket";
|
||||
_purchaseUrl = $"{_settings.Value.PurchaseUrl}/api/v1";
|
||||
@ -53,6 +55,33 @@ namespace Microsoft.eShopOnContainers.WebMVC.Services
|
||||
|
||||
return basket;
|
||||
}
|
||||
public async Task<Basket> ApplyCoupon(Basket basket)
|
||||
{
|
||||
var uri = API.Basket.UpdateBasket(_basketByPassUrl);
|
||||
|
||||
var basketUpdate = new
|
||||
{
|
||||
BuyerId = basket.BuyerId,
|
||||
Items = basket.Items.Select(item => new
|
||||
{
|
||||
Id = item.Id,
|
||||
ProductId = item.ProductId,
|
||||
ProductName = item.ProductName,
|
||||
UnitPrice = item.UnitPrice * (decimal)0.10,
|
||||
OldUnitPrice = item.UnitPrice,
|
||||
Quantity = item.Quantity,
|
||||
PictureUrl = item.PictureUrl
|
||||
}).ToArray()
|
||||
};
|
||||
|
||||
var basketContent = new StringContent(JsonConvert.SerializeObject(basketUpdate), System.Text.Encoding.UTF8, "application/json");
|
||||
|
||||
var response = await _apiClient.PostAsync(uri, basketContent);
|
||||
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
return basket;
|
||||
}
|
||||
|
||||
public async Task Checkout(BasketDTO basket)
|
||||
{
|
||||
|
36
src/Web/WebMVC/Services/CouponService.cs
Normal file
36
src/Web/WebMVC/Services/CouponService.cs
Normal file
@ -0,0 +1,36 @@
|
||||
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;
|
||||
using WebMVC.Services.ModelDTOs;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Services
|
||||
{
|
||||
public class CouponService : ICouponService
|
||||
{
|
||||
public Basket Apply(Basket basket)
|
||||
{
|
||||
//Basket updatedBasket = new Basket();
|
||||
//updatedBasket.BuyerId = basket.BuyerId;
|
||||
//// Todo: Stub for now, should reach out to a coupon microservice
|
||||
//if (basket.CouponCode == "SM360")
|
||||
//{
|
||||
// foreach (BasketItem item in basket.Items)
|
||||
// {
|
||||
// item.UnitPrice = item.UnitPrice - (item.UnitPrice * (decimal)0.1);
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
throw new System.NotImplementedException();
|
||||
//}
|
||||
//return basket;
|
||||
}
|
||||
}
|
||||
}
|
@ -11,6 +11,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Services
|
||||
Task AddItemToBasket(ApplicationUser user, int productId);
|
||||
Task<Basket> UpdateBasket(Basket basket);
|
||||
Task Checkout(BasketDTO basket);
|
||||
Task<Basket> ApplyCoupon(Basket basket);
|
||||
Task<Basket> SetQuantities(ApplicationUser user, Dictionary<string, int> quantities);
|
||||
Task<Order> GetOrderDraft(string basketId);
|
||||
}
|
||||
|
13
src/Web/WebMVC/Services/ICouponService.cs
Normal file
13
src/Web/WebMVC/Services/ICouponService.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
using Microsoft.eShopOnContainers.WebMVC.ViewModels;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using WebMVC.Services.ModelDTOs;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.WebMVC.Services
|
||||
{
|
||||
public interface ICouponService
|
||||
{
|
||||
Basket Apply(Basket basket);
|
||||
}
|
||||
}
|
@ -15,6 +15,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.ViewModels
|
||||
|
||||
public decimal Total()
|
||||
{
|
||||
// What is we apply the discount here
|
||||
return Math.Round(Items.Sum(x => x.UnitPrice * x.Quantity), 2);
|
||||
}
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.ViewModels
|
||||
|
||||
[Required]
|
||||
public Guid RequestId { get; set; }
|
||||
|
||||
public string CouponCode { get; internal set; }
|
||||
|
||||
public void CardExpirationShortFormat()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user