using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate; using Microsoft.eShopWeb.ApplicationCore.Interfaces; using Microsoft.eShopWeb.Infrastructure.Identity; using Microsoft.eShopWeb.Web.Interfaces; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Microsoft.eShopWeb.Web.Pages.Basket { public class CheckoutModel : PageModel { private readonly IBasketService _basketService; private readonly SignInManager _signInManager; private readonly IOrderService _orderService; private string _username = null; private readonly IBasketViewModelService _basketViewModelService; public CheckoutModel(IBasketService basketService, IBasketViewModelService basketViewModelService, SignInManager signInManager, IOrderService orderService) { _basketService = basketService; _signInManager = signInManager; _orderService = orderService; _basketViewModelService = basketViewModelService; } public BasketViewModel BasketModel { get; set; } = new BasketViewModel(); public void OnGet() { } public async Task OnPost(Dictionary 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); } } }