Adding cart/basket support and applicationuser (without EF requirement)

This commit is contained in:
Steve Smith
2017-04-17 23:37:42 -04:00
parent c1d19a09e4
commit e019654143
11 changed files with 107 additions and 11 deletions

View File

@@ -5,7 +5,7 @@
</PropertyGroup>
<ItemGroup>
<Folder Include="Interfaces\" />
<PackageReference Include="System.Security.Claims" Version="4.3.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,10 @@
using System.Security.Claims;
namespace ApplicationCore.Entities
{
public class ApplicationUser : ClaimsIdentity
{
public string UserId { get; set; }
public string UserName { get; set; }
}
}

View File

@@ -1,7 +1,7 @@
namespace Microsoft.eShopWeb.ApplicationCore.Entities
{
public class BaseEntity
public class BaseEntity<T>
{
public int Id { get; set; }
public T Id { get; set; }
}
}

View File

@@ -0,0 +1,10 @@
using System.Collections.Generic;
namespace Microsoft.eShopWeb.ApplicationCore.Entities
{
public class Basket : BaseEntity<string>
{
public string BuyerId { get; set; }
public List<BasketItem> Items { get; set; } = new List<BasketItem>();
}
}

View File

@@ -0,0 +1,9 @@
namespace Microsoft.eShopWeb.ApplicationCore.Entities
{
public class BasketItem : BaseEntity<string>
{
public int ProductId { get; set; }
public decimal UnitPrice { get; set; }
public int Quantity { get; set; }
}
}

View File

@@ -1,6 +1,6 @@
namespace Microsoft.eShopWeb.ApplicationCore.Entities
{
public class CatalogBrand : BaseEntity
public class CatalogBrand : BaseEntity<int>
{
public string Brand { get; set; }
}

View File

@@ -1,6 +1,6 @@
namespace Microsoft.eShopWeb.ApplicationCore.Entities
{
public class CatalogItem : BaseEntity
public class CatalogItem : BaseEntity<int>
{
public string Name { get; set; }
public string Description { get; set; }

View File

@@ -1,6 +1,6 @@
namespace Microsoft.eShopWeb.ApplicationCore.Entities
{
public class CatalogType : BaseEntity
public class CatalogType : BaseEntity<int>
{
public string Type { get; set; }
}

View File

@@ -0,0 +1,18 @@
using ApplicationCore.Entities;
using Microsoft.eShopWeb.ApplicationCore.Entities;
using System.Security.Principal;
using System.Threading.Tasks;
namespace ApplicationCore.Interfaces
{
public interface IBasketService
{
Task<Basket> GetBasket(ApplicationUser user);
}
public interface IIdentityParser<T>
{
T Parse(IPrincipal principal);
}
}

View File

@@ -0,0 +1,53 @@
using Microsoft.eShopWeb.Services;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using ApplicationCore.Interfaces;
using ApplicationCore.Entities;
using Microsoft.eShopWeb.ApplicationCore.Entities;
using System;
namespace Microsoft.eShopWeb.Controllers
{
public class CartController : Controller
{
private readonly ICatalogService _catalogSvc;
private readonly IBasketService _basketSvc;
private readonly IIdentityParser<ApplicationUser> _appUserParser;
public CartController(IBasketService basketSvc,
IIdentityParser<ApplicationUser> appUserParser)
{
//_catalogSvc = catalogSvc;
_basketSvc = basketSvc;
_appUserParser = appUserParser;
}
// GET: /<controller>/
public async Task<IActionResult> Index()
{
var user = _appUserParser.Parse(HttpContext.User);
var viewmodel = await _basketSvc.GetBasket(user);
return View(viewmodel);
}
public async Task<IActionResult> AddToCart(CatalogItem productDetails)
{
if (productDetails.Id != null)
{
var user = _appUserParser.Parse(HttpContext.User);
var product = new BasketItem()
{
Id = Guid.NewGuid().ToString(),
Quantity = 1,
UnitPrice = productDetails.Price,
ProductId = productDetails.Id
};
//await _basketSvc.AddItemToBasket(user, product);
}
return RedirectToAction("Index", "Catalog");
}
}
}

View File

@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.IO;
using Microsoft.AspNetCore.Hosting;
namespace Microsoft.eShopWeb