Adding cart/basket support and applicationuser (without EF requirement)
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="Interfaces\" />
|
<PackageReference Include="System.Security.Claims" Version="4.3.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
10
src/ApplicationCore/Entities/ApplicationUser.cs
Normal file
10
src/ApplicationCore/Entities/ApplicationUser.cs
Normal 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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
||||||
{
|
{
|
||||||
public class BaseEntity
|
public class BaseEntity<T>
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public T Id { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
10
src/ApplicationCore/Entities/Basket.cs
Normal file
10
src/ApplicationCore/Entities/Basket.cs
Normal 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>();
|
||||||
|
}
|
||||||
|
}
|
||||||
9
src/ApplicationCore/Entities/BasketItem.cs
Normal file
9
src/ApplicationCore/Entities/BasketItem.cs
Normal 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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
||||||
{
|
{
|
||||||
public class CatalogBrand : BaseEntity
|
public class CatalogBrand : BaseEntity<int>
|
||||||
{
|
{
|
||||||
public string Brand { get; set; }
|
public string Brand { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
||||||
{
|
{
|
||||||
public class CatalogItem : BaseEntity
|
public class CatalogItem : BaseEntity<int>
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
namespace Microsoft.eShopWeb.ApplicationCore.Entities
|
||||||
{
|
{
|
||||||
public class CatalogType : BaseEntity
|
public class CatalogType : BaseEntity<int>
|
||||||
{
|
{
|
||||||
public string Type { get; set; }
|
public string Type { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
18
src/ApplicationCore/Interfaces/IBasketService.cs
Normal file
18
src/ApplicationCore/Interfaces/IBasketService.cs
Normal 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
53
src/Web/Controllers/CartController.cs
Normal file
53
src/Web/Controllers/CartController.cs
Normal 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");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
using System;
|
using System.IO;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
|
||||||
namespace Microsoft.eShopWeb
|
namespace Microsoft.eShopWeb
|
||||||
|
|||||||
Reference in New Issue
Block a user