committed by
GitHub
7 changed files with 92 additions and 27 deletions
@ -1,4 +1,5 @@ |
|||||
@page |
@page |
||||
|
@model CheckoutModel |
||||
@{ |
@{ |
||||
ViewData["Title"] = "Checkout Complete"; |
ViewData["Title"] = "Checkout Complete"; |
||||
} |
} |
||||
@ -0,0 +1,85 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Microsoft.AspNetCore.Mvc.RazorPages; |
||||
|
using Microsoft.eShopWeb.RazorPages.ViewModels; |
||||
|
using Microsoft.eShopWeb.RazorPages.Interfaces; |
||||
|
using ApplicationCore.Interfaces; |
||||
|
using Microsoft.AspNetCore.Identity; |
||||
|
using Infrastructure.Identity; |
||||
|
using System; |
||||
|
using Microsoft.AspNetCore.Http; |
||||
|
using System.Collections.Generic; |
||||
|
using ApplicationCore.Entities.OrderAggregate; |
||||
|
|
||||
|
namespace Microsoft.eShopWeb.RazorPages.Pages.Basket |
||||
|
{ |
||||
|
public class CheckoutModel : PageModel |
||||
|
{ |
||||
|
private readonly IBasketService _basketService; |
||||
|
private readonly IUriComposer _uriComposer; |
||||
|
private readonly SignInManager<ApplicationUser> _signInManager; |
||||
|
private readonly IOrderService _orderService; |
||||
|
private string _username = null; |
||||
|
private readonly IBasketViewModelService _basketViewModelService; |
||||
|
|
||||
|
public CheckoutModel(IBasketService basketService, |
||||
|
IBasketViewModelService basketViewModelService, |
||||
|
IUriComposer uriComposer, |
||||
|
SignInManager<ApplicationUser> signInManager, |
||||
|
IOrderService orderService) |
||||
|
{ |
||||
|
_basketService = basketService; |
||||
|
_uriComposer = uriComposer; |
||||
|
_signInManager = signInManager; |
||||
|
_orderService = orderService; |
||||
|
_basketViewModelService = basketViewModelService; |
||||
|
} |
||||
|
|
||||
|
public BasketViewModel BasketModel { get; set; } = new BasketViewModel(); |
||||
|
|
||||
|
public void OnGet() |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public async Task<IActionResult> OnPost(Dictionary<string,int> items) |
||||
|
{ |
||||
|
await SetBasketModelAsync(); |
||||
|
|
||||
|
await _basketService.SetQuantities(BasketModel.Id, items); |
||||
|
|
||||
|
await _orderService.CreateOrderAsync(BasketModel.Id, new Address("123 Main St.", "Kent", "OH", "United States", "44240")); |
||||
|
|
||||
|
await _basketService.DeleteBasketAsync(BasketModel.Id); |
||||
|
|
||||
|
return RedirectToPage(); |
||||
|
} |
||||
|
|
||||
|
private async Task SetBasketModelAsync() |
||||
|
{ |
||||
|
if (_signInManager.IsSignedIn(HttpContext.User)) |
||||
|
{ |
||||
|
BasketModel = await _basketViewModelService.GetOrCreateBasketForUser(User.Identity.Name); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
GetOrSetBasketCookieAndUserName(); |
||||
|
BasketModel = await _basketViewModelService.GetOrCreateBasketForUser(_username); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private void GetOrSetBasketCookieAndUserName() |
||||
|
{ |
||||
|
if (Request.Cookies.ContainsKey(Constants.BASKET_COOKIENAME)) |
||||
|
{ |
||||
|
_username = Request.Cookies[Constants.BASKET_COOKIENAME]; |
||||
|
} |
||||
|
if (_username != null) return; |
||||
|
|
||||
|
_username = Guid.NewGuid().ToString(); |
||||
|
var cookieOptions = new CookieOptions(); |
||||
|
cookieOptions.Expires = DateTime.Today.AddYears(10); |
||||
|
Response.Cookies.Append(Constants.BASKET_COOKIENAME, _username, cookieOptions); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue