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 IOrderingService _orderSvc;
|
||||||
private IBasketService _basketSvc;
|
private IBasketService _basketSvc;
|
||||||
|
private ICouponService _couponSvc;
|
||||||
private readonly IIdentityParser<ApplicationUser> _appUserParser;
|
private readonly IIdentityParser<ApplicationUser> _appUserParser;
|
||||||
public OrderController(IOrderingService orderSvc, IBasketService basketSvc, 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 user = _appUserParser.Parse(HttpContext.User);
|
||||||
var basket = _orderSvc.MapOrderToBasket(model);
|
var basket = _orderSvc.MapOrderToBasket(model);
|
||||||
|
|
||||||
await _basketSvc.Checkout(basket);
|
await _basketSvc.Checkout(basket);
|
||||||
|
|
||||||
//Redirect to historic list.
|
//Redirect to historic list.
|
||||||
|
@ -18,12 +18,14 @@ namespace Microsoft.eShopOnContainers.WebMVC.Services
|
|||||||
private readonly ILogger<BasketService> _logger;
|
private readonly ILogger<BasketService> _logger;
|
||||||
private readonly string _basketByPassUrl;
|
private readonly string _basketByPassUrl;
|
||||||
private readonly string _purchaseUrl;
|
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;
|
_apiClient = httpClient;
|
||||||
_settings = settings;
|
_settings = settings;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_couponSvc = couponService;
|
||||||
|
|
||||||
_basketByPassUrl = $"{_settings.Value.PurchaseUrl}/b/api/v1/basket";
|
_basketByPassUrl = $"{_settings.Value.PurchaseUrl}/b/api/v1/basket";
|
||||||
_purchaseUrl = $"{_settings.Value.PurchaseUrl}/api/v1";
|
_purchaseUrl = $"{_settings.Value.PurchaseUrl}/api/v1";
|
||||||
@ -53,6 +55,33 @@ namespace Microsoft.eShopOnContainers.WebMVC.Services
|
|||||||
|
|
||||||
return basket;
|
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)
|
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 AddItemToBasket(ApplicationUser user, int productId);
|
||||||
Task<Basket> UpdateBasket(Basket basket);
|
Task<Basket> UpdateBasket(Basket basket);
|
||||||
Task Checkout(BasketDTO basket);
|
Task Checkout(BasketDTO basket);
|
||||||
|
Task<Basket> ApplyCoupon(Basket basket);
|
||||||
Task<Basket> SetQuantities(ApplicationUser user, Dictionary<string, int> quantities);
|
Task<Basket> SetQuantities(ApplicationUser user, Dictionary<string, int> quantities);
|
||||||
Task<Order> GetOrderDraft(string basketId);
|
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()
|
public decimal Total()
|
||||||
{
|
{
|
||||||
|
// What is we apply the discount here
|
||||||
return Math.Round(Items.Sum(x => x.UnitPrice * x.Quantity), 2);
|
return Math.Round(Items.Sum(x => x.UnitPrice * x.Quantity), 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.ViewModels
|
|||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
public Guid RequestId { get; set; }
|
public Guid RequestId { get; set; }
|
||||||
|
public string CouponCode { get; internal set; }
|
||||||
|
|
||||||
public void CardExpirationShortFormat()
|
public void CardExpirationShortFormat()
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user