Browse Source

Order items in ordering api

pull/49/merge
Carlos Cañizares Estévez 8 years ago
parent
commit
9e72fe7c7c
19 changed files with 138 additions and 36 deletions
  1. +2
    -2
      src/Services/Basket/Basket.API/Program.cs
  2. +1
    -1
      src/Services/Basket/Basket.API/Properties/launchSettings.json
  3. +1
    -1
      src/Services/Basket/Basket.API/appsettings.json
  4. +16
    -16
      src/Services/Identity/eShopOnContainers.Identity/Data/ApplicationContextSeed.cs
  5. +1
    -1
      src/Services/Identity/eShopOnContainers.Identity/Program.cs
  6. +11
    -0
      src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs
  7. +8
    -0
      src/Services/Ordering/Ordering.API/Models/NewOrderViewModel.cs
  8. +15
    -0
      src/Services/Ordering/Ordering.API/Models/OrderItemViewModel.cs
  9. +1
    -1
      src/Services/Ordering/Ordering.API/Properties/launchSettings.json
  10. +5
    -0
      src/Services/Ordering/Ordering.Application/Commands/NewOrderREquestHandler.cs
  11. +17
    -0
      src/Services/Ordering/Ordering.Application/Commands/NewOrderRequest.cs
  12. +9
    -1
      src/Services/Ordering/Ordering.Domain/Order.cs
  13. +6
    -9
      src/Services/Ordering/Ordering.Domain/OrderItem.cs
  14. +1
    -0
      src/Web/WebMVC/Controllers/AccountController.cs
  15. +2
    -0
      src/Web/WebMVC/Controllers/OrderController.cs
  16. +5
    -1
      src/Web/WebMVC/Models/OrderRequest.cs
  17. +20
    -0
      src/Web/WebMVC/Models/OrderRequestItem.cs
  18. +16
    -2
      src/Web/WebMVC/Services/OrderingService.cs
  19. +1
    -1
      src/Web/WebMVC/appsettings.json

+ 2
- 2
src/Services/Basket/Basket.API/Program.cs View File

@ -15,8 +15,8 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseUrls("http://0.0.0.0:5103")
//.UseIISIntegration()
.UseUrls("http://0.0.0.0:5003")
.UseIISIntegration()
.UseStartup<Startup>()
.Build();


+ 1
- 1
src/Services/Basket/Basket.API/Properties/launchSettings.json View File

@ -3,7 +3,7 @@
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:2160/",
"applicationUrl": "http://localhost:5003/",
"sslPort": 0
}
},


+ 1
- 1
src/Services/Basket/Basket.API/appsettings.json View File

@ -7,6 +7,6 @@
"Microsoft": "Information"
}
},
"IdentityUrl": "http://localhost:5105",
"IdentityUrl": "http://localhost:5000",
"ConnectionString": "127.0.0.1"
}

+ 16
- 16
src/Services/Identity/eShopOnContainers.Identity/Data/ApplicationContextSeed.cs View File

@ -56,29 +56,29 @@
var user =
new ApplicationUser()
{
CardHolderName = "Jhon Doe",
CardNumber = "1111-2222-33-4444",
CardHolderName = "DemoUser",
CardNumber = "4012888888881881",
CardType = 1,
City = "Seattle",
Country = "EEUU",
City = "Redmond",
Country = "U.S.",
CountryCode = "91",
Email = "jdoe@eshop.com",
Email = "demouser@microsoft.com",
Expiration = "12/20",
Id = Guid.NewGuid().ToString(),
LastName = "Doe",
Name = "Jhon",
PhoneNumber = "600 11 22 33",
UserName = "jdoe@eshop.com",
ZipCode = "56730",
State = "Washington",
Street = "Street..",
SecurityNumber = "256",
NormalizedEmail = "JDOE@ESHOP.COM",
NormalizedUserName = "JDOE@ESHOP.COM",
LastName = "DemoLastName",
Name = "DemoUser",
PhoneNumber = "1234567890",
UserName = "demouser@microsoft.com",
ZipCode = "98052",
State = "WA",
Street = "15703 NE 61st Ct",
SecurityNumber = "535",
NormalizedEmail = "DEMOUSER@MICROSOFT.COM",
NormalizedUserName = "DEMOUSER@MICROSOFT.COM",
SecurityStamp = Guid.NewGuid().ToString("D")
};
user.PasswordHash = _passwordHasher.HashPassword(user, "eshopContainers.123");
user.PasswordHash = _passwordHasher.HashPassword(user, "Pass@word1");
return user;
}


+ 1
- 1
src/Services/Identity/eShopOnContainers.Identity/Program.cs View File

@ -13,7 +13,7 @@ namespace eShopOnContainers.Identity
{
var host = new WebHostBuilder()
.UseKestrel()
.UseUrls("http://0.0.0.0:5105")
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()


+ 11
- 0
src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs View File

@ -53,6 +53,17 @@
Street = order.ShippingStreet
};
foreach (var orderItem in order.Items)
{
newOrderRequest.AddOrderItem(new Domain.OrderItem() {
Discount = orderItem.Discount,
ProductId = orderItem.ProductId,
UnitPrice = orderItem.UnitPrice,
ProductName = orderItem.ProductName,
Units = orderItem.Units
});
}
var added = await _mediator.SendAsync(newOrderRequest);
if (added)


+ 8
- 0
src/Services/Ordering/Ordering.API/Models/NewOrderViewModel.cs View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
namespace Microsoft.eShopOnContainers.Services.Ordering.API.Models
{
@ -21,5 +22,12 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Models
public DateTime CardExpiration { get; set; }
public string CardSecurityNumber { get; set; }
public List<OrderItemViewModel> Items { get; set; }
public NewOrderViewModel()
{
Items = new List<OrderItemViewModel>();
}
}
}

+ 15
- 0
src/Services/Ordering/Ordering.API/Models/OrderItemViewModel.cs View File

@ -0,0 +1,15 @@
namespace Microsoft.eShopOnContainers.Services.Ordering.API.Models
{
public class OrderItemViewModel
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public decimal UnitPrice { get; set; }
public decimal Discount { get; set; }
public int Units { get; set; }
}
}

+ 1
- 1
src/Services/Ordering/Ordering.API/Properties/launchSettings.json View File

@ -3,7 +3,7 @@
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:5102/",
"applicationUrl": "http://localhost:5002/",
"sslPort": 0
}
},


+ 5
- 0
src/Services/Ordering/Ordering.Application/Commands/NewOrderREquestHandler.cs View File

@ -55,6 +55,11 @@
ZipCode = message.ZipCode
});
foreach (var item in message.OrderItems)
{
order.AddOrderItem(item);
}
_orderRepository.Add(order);
var result = await _orderRepository.UnitOfWork


+ 17
- 0
src/Services/Ordering/Ordering.Application/Commands/NewOrderRequest.cs View File

@ -2,10 +2,15 @@
{
using System;
using MediatR;
using Domain;
using System.Collections;
using System.Collections.Generic;
public class NewOrderRequest
:IAsyncRequest<bool>
{
private readonly List<OrderItem> _orderItems;
public string City { get; set; }
public string Street { get; set; }
@ -27,5 +32,17 @@
public int CardTypeId { get; set; }
public string Buyer { get; set; }
public IEnumerable<OrderItem> OrderItems => _orderItems;
public void AddOrderItem(OrderItem item)
{
_orderItems.Add(item);
}
public NewOrderRequest()
{
_orderItems = new List<OrderItem>();
}
}
}

+ 9
- 1
src/Services/Ordering/Ordering.Domain/Order.cs View File

@ -17,7 +17,7 @@
public OrderStatus Status { get; private set; }
public ICollection<OrderItem> OrderItems { get; set; }
public ICollection<OrderItem> OrderItems { get; private set; }
public int? ShippingAddressId { get; private set; }
@ -35,6 +35,7 @@
PaymentId = paymentId;
StatusId = OrderStatus.InProcess.Id;
OrderDate = DateTime.UtcNow;
OrderItems = new List<OrderItem>();
}
public void SetAddress(Address address)
@ -46,5 +47,12 @@
ShippingAddress = address;
}
public void AddOrderItem(OrderItem item)
{
// Note: Some logic could be added here (like grouping items in one single OrderItem)
// Also validation logic could be added here (like ensuring adding almost one item)
OrderItems.Add(item);
}
}
}

+ 6
- 9
src/Services/Ordering/Ordering.Domain/OrderItem.cs View File

@ -6,20 +6,17 @@
public class OrderItem
:Entity
{
public int ProductId { get; private set; }
public int ProductId { get; set; }
public string ProductName { get; private set; }
public string ProductName { get; set; }
public int OrderId { get; private set; }
public int OrderId { get; set; }
public decimal UnitPrice { get; private set; }
public decimal UnitPrice { get; set; }
public decimal Discount { get; private set; }
public decimal Discount { get; set; }
public int Units { get; private set; }
public int Units { get; set; }
protected OrderItem()
{
}
}
}

+ 1
- 0
src/Web/WebMVC/Controllers/AccountController.cs View File

@ -40,6 +40,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Controllers
{
HttpContext.Authentication.SignOutAsync("Cookies");
HttpContext.Authentication.SignOutAsync("oidc");
return new SignOutResult("oidc", new AuthenticationProperties { RedirectUri = "/" });
}
}


+ 2
- 0
src/Web/WebMVC/Controllers/OrderController.cs View File

@ -42,11 +42,13 @@ namespace Microsoft.eShopOnContainers.WebMVC.Controllers
basket = await _basketSvc.UpdateBasket(basket);
var order = _basketSvc.MapBasketToOrder(basket);
// override if user has changed some shipping address or payment info data.
_orderSvc.OverrideUserInfoIntoOrder(model.Order, order);
if (action == "[ Place Order ]")
{
await _orderSvc.CreateOrder(user, order);
//Empty basket for current user.


+ 5
- 1
src/Web/WebMVC/Models/OrderRequest.cs View File

@ -8,7 +8,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Models
public class OrderRequest
{
public OrderRequest() {
Items = new List<OrderRequestItem>();
}
public string City { get; set; }
@ -32,5 +32,9 @@ namespace Microsoft.eShopOnContainers.WebMVC.Models
public int CardTypeId { get; set; }
public string Buyer { get; set; }
public List<OrderRequestItem> Items { get; }
}
}

+ 20
- 0
src/Web/WebMVC/Models/OrderRequestItem.cs View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Microsoft.eShopOnContainers.WebMVC.Models
{
public class OrderRequestItem
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public decimal UnitPrice { get; set; }
public decimal Discount { get; set; }
public int Units { get; set; }
}
}

+ 16
- 2
src/Web/WebMVC/Services/OrderingService.cs View File

@ -111,7 +111,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Services
public OrderRequest MapOrderIntoOrderRequest(Order order)
{
return new OrderRequest()
var od = new OrderRequest()
{
CardHolderName = order.PaymentInfo.CardHolderName,
CardNumber = order.PaymentInfo.CardNumber,
@ -121,8 +121,22 @@ namespace Microsoft.eShopOnContainers.WebMVC.Services
Country = order.ShippingAddress.Country,
State = order.ShippingAddress.State,
Street = order.ShippingAddress.Street,
ZipCode = order.ShippingAddress.ZipCode
ZipCode = order.ShippingAddress.ZipCode,
};
foreach (var item in order.OrderItems)
{
od.Items.Add(new OrderRequestItem()
{
Discount = item.Discount,
ProductId = int.Parse(item.ProductId),
ProductName = item.ProductName,
UnitPrice = item.UnitPrice,
Units = item.Quantity
});
}
return od;
}
async public Task CreateOrder(ApplicationUser user, Order order)


+ 1
- 1
src/Web/WebMVC/appsettings.json View File

@ -2,7 +2,7 @@
"CatalogUrl": "http://localhost:5101",
"OrderingUrl": "http://localhost:5102",
"BasketUrl": "http://localhost:5103",
"IdentityUrl": "http://localhost:5000",
"IdentityUrl": "http://localhost:5105",
"CallBackUrl": "http://localhost:5100/",
"Logging": {
"IncludeScopes": false,


Loading…
Cancel
Save