From b0d4ae5a72c36158716653a40b1c24308d53d76d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Tom=C3=A0s?= Date: Fri, 2 Feb 2018 11:26:47 +0000 Subject: [PATCH] All order flow goes through Purchase BFF API. Also some refactorings. --- docker-compose.override.yml | 1 + src/BFFs/PurchaseBff/Config/UrlsConfig.cs | 8 ++- .../Controllers/BasketController.cs | 3 + .../Controllers/OrderController.cs | 8 ++- .../PurchaseBff/Services/BasketService.cs | 25 ------- .../PurchaseBff/Services/IBasketService.cs | 1 - .../PurchaseBff/Services/IOrderApiClient.cs | 13 ++++ .../PurchaseBff/Services/OrderApiClient.cs | 37 ++++++++++ src/BFFs/PurchaseBff/Startup.cs | 1 + .../PurchaseBff/appsettings.localhost.json | 3 +- .../Basket.API/Properties/launchSettings.json | 2 +- .../Controllers/CatalogController.cs | 14 ++-- .../Extensions/CatalogItemExtensions.cs | 17 +++++ .../Commands/CreateOrderCommand.cs | 17 +---- .../Commands/CreateOrderDraftCommand.cs | 27 +++++++ .../CreateOrderDraftCommandHandler.cs | 72 +++++++++++++++++++ .../Controllers/OrdersController.cs | 9 +++ .../Extensions/BasketItemExtensions.cs | 32 +++++++++ .../Properties/launchSettings.json | 4 +- .../AggregatesModel/OrderAggregate/Order.cs | 31 +++++--- .../OrderAggregate/OrderItem.cs | 8 +-- src/Web/WebSPA/Properties/launchSettings.json | 2 +- 22 files changed, 264 insertions(+), 71 deletions(-) create mode 100644 src/BFFs/PurchaseBff/Services/IOrderApiClient.cs create mode 100644 src/BFFs/PurchaseBff/Services/OrderApiClient.cs create mode 100644 src/Services/Catalog/Catalog.API/Extensions/CatalogItemExtensions.cs create mode 100644 src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommand.cs create mode 100644 src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommandHandler.cs create mode 100644 src/Services/Ordering/Ordering.API/Extensions/BasketItemExtensions.cs diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 0a0b547b4..bf6a80691 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -235,6 +235,7 @@ services: - ASPNETCORE_ENVIRONMENT=Development - urls__basket=http://basket.api - urls__catalog=http://catalog.api + - urls__orders=http://ordering.api - urls__identity=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5110. ports: - "5120:80" diff --git a/src/BFFs/PurchaseBff/Config/UrlsConfig.cs b/src/BFFs/PurchaseBff/Config/UrlsConfig.cs index 2079a4615..bca4db9ff 100644 --- a/src/BFFs/PurchaseBff/Config/UrlsConfig.cs +++ b/src/BFFs/PurchaseBff/Config/UrlsConfig.cs @@ -15,10 +15,16 @@ namespace PurchaseBff.Config public class BasketOperations { public static string GetItemById(string id) => $"/api/v1/basket/{id}"; - public static string UpdateBasket() => $"/api/v1/basket"; + public static string UpdateBasket() => "/api/v1/basket"; + } + + public class OrdersOperations + { + public static string GetOrderDraft() => "/api/v1/orders/draft"; } public string Basket { get; set; } public string Catalog { get; set; } + public string Orders { get; set; } } } diff --git a/src/BFFs/PurchaseBff/Controllers/BasketController.cs b/src/BFFs/PurchaseBff/Controllers/BasketController.cs index 12290a127..17dbf6ff5 100644 --- a/src/BFFs/PurchaseBff/Controllers/BasketController.cs +++ b/src/BFFs/PurchaseBff/Controllers/BasketController.cs @@ -64,6 +64,9 @@ namespace PurchaseBff.Controllers // Step 1: Get the item from catalog var item = await _catalog.GetCatalogItem(data.CatalogItemId); + + //item.PictureUri = + // Step 2: Get current basket status var currentBasket = (await _basket.GetById(data.BasketId)) ?? new BasketData(data.BasketId); // Step 3: Merge current status with new product diff --git a/src/BFFs/PurchaseBff/Controllers/OrderController.cs b/src/BFFs/PurchaseBff/Controllers/OrderController.cs index 7e7b00c1b..91d0062ac 100644 --- a/src/BFFs/PurchaseBff/Controllers/OrderController.cs +++ b/src/BFFs/PurchaseBff/Controllers/OrderController.cs @@ -13,9 +13,11 @@ namespace PurchaseBff.Controllers public class OrderController : Controller { private readonly IBasketService _basketService; - public OrderController(IBasketService basketService) + private readonly IOrderApiClient _orderClient; + public OrderController(IBasketService basketService, IOrderApiClient orderClient) { _basketService = basketService; + _orderClient = orderClient; } [Route("draft/{basketId}")] @@ -33,8 +35,8 @@ namespace PurchaseBff.Controllers return BadRequest($"No basket found for id {basketId}"); } - var order = _basketService.MapBasketToOrder(basket, isDraft: true); - return Ok(order); + var orderDraft = await _orderClient.GetOrderDraftFromBasket(basket); + return Ok(orderDraft); } } } diff --git a/src/BFFs/PurchaseBff/Services/BasketService.cs b/src/BFFs/PurchaseBff/Services/BasketService.cs index fd16843a1..881718baf 100644 --- a/src/BFFs/PurchaseBff/Services/BasketService.cs +++ b/src/BFFs/PurchaseBff/Services/BasketService.cs @@ -44,31 +44,6 @@ namespace PurchaseBff.Services int i = 0; } - public OrderData MapBasketToOrder(BasketData basket, bool isDraft) - { - var order = new OrderData - { - Total = 0, - IsDraft = isDraft - }; - - basket.Items.ForEach(x => - { - order.OrderItems.Add(new OrderItemData() - { - ProductId = int.Parse(x.ProductId), - - PictureUrl = x.PictureUrl, - ProductName = x.ProductName, - Units = x.Quantity, - UnitPrice = x.UnitPrice - }); - order.Total += (x.Quantity * x.UnitPrice); - }); - - return order; - } - async Task GetUserTokenAsync() { var context = _httpContextAccessor.HttpContext; diff --git a/src/BFFs/PurchaseBff/Services/IBasketService.cs b/src/BFFs/PurchaseBff/Services/IBasketService.cs index 79319536f..74f6c21ba 100644 --- a/src/BFFs/PurchaseBff/Services/IBasketService.cs +++ b/src/BFFs/PurchaseBff/Services/IBasketService.cs @@ -11,6 +11,5 @@ namespace PurchaseBff.Services Task GetById(string id); Task Update(BasketData currentBasket); - OrderData MapBasketToOrder(BasketData basket, bool isDraft); } } diff --git a/src/BFFs/PurchaseBff/Services/IOrderApiClient.cs b/src/BFFs/PurchaseBff/Services/IOrderApiClient.cs new file mode 100644 index 000000000..2d23e71f6 --- /dev/null +++ b/src/BFFs/PurchaseBff/Services/IOrderApiClient.cs @@ -0,0 +1,13 @@ +using PurchaseBff.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace PurchaseBff.Services +{ + public interface IOrderApiClient + { + Task GetOrderDraftFromBasket(BasketData basket); + } +} diff --git a/src/BFFs/PurchaseBff/Services/OrderApiClient.cs b/src/BFFs/PurchaseBff/Services/OrderApiClient.cs new file mode 100644 index 000000000..44f33cf71 --- /dev/null +++ b/src/BFFs/PurchaseBff/Services/OrderApiClient.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Newtonsoft.Json; +using PurchaseBff.Config; +using PurchaseBff.Models; + +namespace PurchaseBff.Services +{ + public class OrderApiClient : IOrderApiClient + { + + private readonly IHttpClient _apiClient; + private readonly ILogger _logger; + private readonly UrlsConfig _urls; + + public OrderApiClient(IHttpClient httpClient, ILogger logger, IOptionsSnapshot config) + { + _apiClient = httpClient; + _logger = logger; + _urls = config.Value; + } + + public async Task GetOrderDraftFromBasket(BasketData basket) + { + var url = _urls.Orders + UrlsConfig.OrdersOperations.GetOrderDraft(); + var response = await _apiClient.PostAsync(url, basket); + response.EnsureSuccessStatusCode(); + var jsonResponse = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(jsonResponse); + } + } +} diff --git a/src/BFFs/PurchaseBff/Startup.cs b/src/BFFs/PurchaseBff/Startup.cs index 13fdcc269..d7e9b4e28 100644 --- a/src/BFFs/PurchaseBff/Startup.cs +++ b/src/BFFs/PurchaseBff/Startup.cs @@ -35,6 +35,7 @@ namespace PurchaseBff services.AddSingleton(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddOptions(); services.Configure(Configuration.GetSection("urls")); diff --git a/src/BFFs/PurchaseBff/appsettings.localhost.json b/src/BFFs/PurchaseBff/appsettings.localhost.json index a8c119c93..57b5e894d 100644 --- a/src/BFFs/PurchaseBff/appsettings.localhost.json +++ b/src/BFFs/PurchaseBff/appsettings.localhost.json @@ -2,6 +2,7 @@ "urls": { "basket": "http://localhost:55105", "catalog": "http://localhost:55101", - "identity": "http://localhost:55105" + "orders": "http://localhost:55102", + "identity": "http://localhost:55105" } } diff --git a/src/Services/Basket/Basket.API/Properties/launchSettings.json b/src/Services/Basket/Basket.API/Properties/launchSettings.json index 013205c33..bce29a595 100644 --- a/src/Services/Basket/Basket.API/Properties/launchSettings.json +++ b/src/Services/Basket/Basket.API/Properties/launchSettings.json @@ -3,7 +3,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:57622/", + "applicationUrl": "http://localhost:50920/", "sslPort": 0 } }, diff --git a/src/Services/Catalog/Catalog.API/Controllers/CatalogController.cs b/src/Services/Catalog/Catalog.API/Controllers/CatalogController.cs index 1b53171d0..0d224fc68 100644 --- a/src/Services/Catalog/Catalog.API/Controllers/CatalogController.cs +++ b/src/Services/Catalog/Catalog.API/Controllers/CatalogController.cs @@ -66,6 +66,11 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers } var item = await _catalogContext.CatalogItems.SingleOrDefaultAsync(ci => ci.Id == id); + + var baseUri = _settings.PicBaseUrl; + var azureStorageEnabled = _settings.AzureStorageEnabled; + item.FillProductUrl(baseUri, azureStorageEnabled: azureStorageEnabled); + if (item != null) { return Ok(item); @@ -244,13 +249,12 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers private List ChangeUriPlaceholder(List items) { var baseUri = _settings.PicBaseUrl; + var azureStorageEnabled = _settings.AzureStorageEnabled; - items.ForEach(catalogItem => + foreach (var item in items) { - catalogItem.PictureUri = _settings.AzureStorageEnabled - ? baseUri + catalogItem.PictureFileName - : baseUri.Replace("[0]", catalogItem.Id.ToString()); - }); + item.FillProductUrl(baseUri, azureStorageEnabled: azureStorageEnabled); + } return items; } diff --git a/src/Services/Catalog/Catalog.API/Extensions/CatalogItemExtensions.cs b/src/Services/Catalog/Catalog.API/Extensions/CatalogItemExtensions.cs new file mode 100644 index 000000000..71b9d88a3 --- /dev/null +++ b/src/Services/Catalog/Catalog.API/Extensions/CatalogItemExtensions.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.eShopOnContainers.Services.Catalog.API.Model +{ + public static class CatalogItemExtensions + { + public static void FillProductUrl(this CatalogItem item, string picBaseUrl, bool azureStorageEnabled) + { + item.PictureUri = azureStorageEnabled + ? picBaseUrl + item.PictureFileName + : picBaseUrl.Replace("[0]", item.Id.ToString()); + } + } +} diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs index 980f9d0b6..437212b8d 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Runtime.Serialization; using System.Collections; using Ordering.API.Application.Models; +using System.Linq; namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands { @@ -68,7 +69,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands string cardNumber, string cardHolderName, DateTime cardExpiration, string cardSecurityNumber, int cardTypeId) : this() { - _orderItems = MapToOrderItems(basketItems); + _orderItems = basketItems.ToOrderItemsDTO().ToList(); UserId = userId; City = city; Street = street; @@ -83,20 +84,6 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands CardExpiration = cardExpiration; } - private List MapToOrderItems(List basketItems) - { - var result = new List(); - basketItems.ForEach((item) => { - result.Add(new OrderItemDTO() { - ProductId = int.TryParse(item.ProductId, out int id) ? id : -1, - ProductName = item.ProductName, - PictureUrl = item.PictureUrl, - UnitPrice = item.UnitPrice, - Units = item.Quantity - }); - }); - return result; - } public class OrderItemDTO { diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommand.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommand.cs new file mode 100644 index 000000000..1d3d52c63 --- /dev/null +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommand.cs @@ -0,0 +1,27 @@ +using MediatR; +using Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.OrderAggregate; +using Ordering.API.Application.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Threading.Tasks; +using static Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands.CreateOrderCommand; + +namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands +{ + public class CreateOrderDraftCommand : IRequest + { + + public string BuyerId { get; private set; } + + public IEnumerable Items { get; private set; } + + public CreateOrderDraftCommand(string buyerId, IEnumerable items) + { + BuyerId = buyerId; + Items = items; + } + } + +} diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommandHandler.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommandHandler.cs new file mode 100644 index 000000000..2c315248b --- /dev/null +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommandHandler.cs @@ -0,0 +1,72 @@ +namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands +{ + using Domain.AggregatesModel.OrderAggregate; + using global::Ordering.API.Application.Models; + using MediatR; + using Microsoft.eShopOnContainers.Services.Ordering.API.Infrastructure.Services; + using Microsoft.eShopOnContainers.Services.Ordering.Infrastructure.Idempotency; + using System; + using System.Collections.Generic; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using static Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands.CreateOrderCommand; + + // Regular CommandHandler + public class CreateOrderDraftCommandHandler + : IRequestHandler + { + private readonly IOrderRepository _orderRepository; + private readonly IIdentityService _identityService; + private readonly IMediator _mediator; + + // Using DI to inject infrastructure persistence Repositories + public CreateOrderDraftCommandHandler(IMediator mediator, IIdentityService identityService) + { + _identityService = identityService ?? throw new ArgumentNullException(nameof(identityService)); + _mediator = mediator ?? throw new ArgumentNullException(nameof(mediator)); + } + + public Task Handle(CreateOrderDraftCommand message, CancellationToken cancellationToken) + { + + var order = Order.NewDraft(); + var orderItems = message.Items.Select(i => i.ToOrderItemDTO()); + foreach (var item in orderItems) + { + order.AddOrderItem(item.ProductId, item.ProductName, item.UnitPrice, item.Discount, item.PictureUrl, item.Units); + } + + return Task.FromResult(OrderDraftDTO.FromOrder(order)); + } + } + + + public class OrderDraftDTO + { + public IEnumerable OrderItems { get; set; } + public decimal Total { get; set; } + + public static OrderDraftDTO FromOrder(Order order) + { + return new OrderDraftDTO() + { + OrderItems = order.OrderItems.Select(oi => new OrderItemDTO + { + Discount = oi.GetCurrentDiscount(), + ProductId = oi.ProductId, + UnitPrice = oi.GetUnitPrice(), + PictureUrl = oi.GetPictureUri(), + Units = oi.GetUnits(), + ProductName = oi.GetOrderItemProductName() + }), + Total = order.GetTotal() + }; + } + + } + + + + +} diff --git a/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs b/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs index 993986543..ac179c97f 100644 --- a/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs +++ b/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs @@ -5,6 +5,7 @@ using Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands; using Microsoft.eShopOnContainers.Services.Ordering.API.Application.Queries; using Microsoft.eShopOnContainers.Services.Ordering.API.Infrastructure.Services; using Ordering.API.Application.Commands; +using Ordering.API.Application.Models; using System; using System.Collections.Generic; using System.Net; @@ -101,6 +102,14 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Controllers return Ok(cardTypes); } + + [Route("draft")] + [HttpPost] + public async Task GetOrderDraftFromBasketData([FromBody] CreateOrderDraftCommand createOrderDraftCommand) + { + var draft = await _mediator.Send(createOrderDraftCommand); + return Ok(draft); + } } } diff --git a/src/Services/Ordering/Ordering.API/Extensions/BasketItemExtensions.cs b/src/Services/Ordering/Ordering.API/Extensions/BasketItemExtensions.cs new file mode 100644 index 000000000..56f280978 --- /dev/null +++ b/src/Services/Ordering/Ordering.API/Extensions/BasketItemExtensions.cs @@ -0,0 +1,32 @@ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using static Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands.CreateOrderCommand; + +namespace Ordering.API.Application.Models +{ + public static class BasketItemExtensions + { + public static IEnumerable ToOrderItemsDTO(this IEnumerable basketItems) + { + foreach (var item in basketItems) + { + yield return item.ToOrderItemDTO(); + } + } + + public static OrderItemDTO ToOrderItemDTO(this BasketItem item) + { + return new OrderItemDTO() + { + ProductId = int.TryParse(item.ProductId, out int id) ? id : -1, + ProductName = item.ProductName, + PictureUrl = item.PictureUrl, + UnitPrice = item.UnitPrice, + Units = item.Quantity + }; + } + } +} diff --git a/src/Services/Ordering/Ordering.API/Properties/launchSettings.json b/src/Services/Ordering/Ordering.API/Properties/launchSettings.json index a6e47ca2d..9d9a76490 100644 --- a/src/Services/Ordering/Ordering.API/Properties/launchSettings.json +++ b/src/Services/Ordering/Ordering.API/Properties/launchSettings.json @@ -3,7 +3,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:5102/", + "applicationUrl": "http://localhost:55102/", "sslPort": 0 } }, @@ -19,7 +19,7 @@ "Microsoft.eShopOnContainers.Services.Ordering.API": { "commandName": "Project", "launchBrowser": true, - "launchUrl": "http://localhost:5000/api/environmentInfo/machinename", + "launchUrl": "http://localhost:55102/", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs b/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs index d2e742b33..82e5744dd 100644 --- a/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs +++ b/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs @@ -25,6 +25,10 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O private string _description; + + // Draft orders have this set to true. Currently we don't check anywhere the draft status of an Order, but we could do it if needed + private bool _isDraft; + // DDD Patterns comment // Using a private collection field, better for DDD Aggregate's encapsulation // so OrderItems cannot be added from "outside the AggregateRoot" directly to the collection, @@ -34,12 +38,21 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O private int? _paymentMethodId; - protected Order() { _orderItems = new List(); } + public static Order NewDraft() + { + var order = new Order(); + order._isDraft = true; + return order; + } + + protected Order() { + _orderItems = new List(); + _isDraft = false; + } public Order(string userId, Address address, int cardTypeId, string cardNumber, string cardSecurityNumber, - string cardHolderName, DateTime cardExpiration, int? buyerId = null, int? paymentMethodId = null) + string cardHolderName, DateTime cardExpiration, int? buyerId = null, int? paymentMethodId = null) : this() { - _orderItems = new List(); _buyerId = buyerId; _paymentMethodId = paymentMethodId; _orderStatusId = OrderStatus.Submitted.Id; @@ -92,12 +105,12 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O } public void SetAwaitingValidationStatus() - { + { if (_orderStatusId == OrderStatus.Submitted.Id) { AddDomainEvent(new OrderStatusChangedToAwaitingValidationDomainEvent(Id, _orderItems)); _orderStatusId = OrderStatus.AwaitingValidation.Id; - } + } } public void SetStockConfirmedStatus() @@ -108,7 +121,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O _orderStatusId = OrderStatus.StockConfirmed.Id; _description = "All the items were confirmed with available stock."; - } + } } public void SetPaidStatus() @@ -119,7 +132,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O _orderStatusId = OrderStatus.Paid.Id; _description = "The payment was performed at a simulated \"American Bank checking bank account endinf on XX35071\""; - } + } } public void SetShippedStatus() @@ -157,13 +170,13 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O var itemsStockRejectedDescription = string.Join(", ", itemsStockRejectedProductNames); _description = $"The product items don't have stock: ({itemsStockRejectedDescription})."; - } + } } private void AddOrderStartedDomainEvent(string userId, int cardTypeId, string cardNumber, string cardSecurityNumber, string cardHolderName, DateTime cardExpiration) { - var orderStartedDomainEvent = new OrderStartedDomainEvent(this, userId, cardTypeId, + var orderStartedDomainEvent = new OrderStartedDomainEvent(this, userId, cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration); diff --git a/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/OrderItem.cs b/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/OrderItem.cs index 1b7896dcc..b3b7435e3 100644 --- a/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/OrderItem.cs +++ b/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/OrderItem.cs @@ -41,13 +41,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O _pictureUrl = PictureUrl; } - public void SetPictureUri(string pictureUri) - { - if (!String.IsNullOrWhiteSpace(pictureUri)) - { - _pictureUrl = pictureUri; - } - } + public string GetPictureUri() => _pictureUrl; public decimal GetCurrentDiscount() { diff --git a/src/Web/WebSPA/Properties/launchSettings.json b/src/Web/WebSPA/Properties/launchSettings.json index 8a55ca730..9ae65426a 100644 --- a/src/Web/WebSPA/Properties/launchSettings.json +++ b/src/Web/WebSPA/Properties/launchSettings.json @@ -3,7 +3,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:57625/", + "applicationUrl": "http://localhost:50921/", "sslPort": 0 } },