Skip to content

Commit f79e21f

Browse files
committed
Merge branch 'order-processflow-redesign' of https://github.com/dotnet-architecture/eShopOnContainers into order-processflow-redesign
# Conflicts: # src/Services/Ordering/Ordering.API/Startup.cs
2 parents 6b36972 + 58b3b6f commit f79e21f

23 files changed

Lines changed: 339 additions & 119 deletions

File tree

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using System;
2+
using System.ComponentModel.DataAnnotations;
3+
4+
namespace eShopOnContainers.Core.Models.Basket
5+
{
6+
public class BasketCheckout
7+
{
8+
[Required]
9+
public string City { get; set; }
10+
[Required]
11+
public string Street { get; set; }
12+
[Required]
13+
public string State { get; set; }
14+
[Required]
15+
public string Country { get; set; }
16+
17+
public string ZipCode { get; set; }
18+
[Required]
19+
public string CardNumber { get; set; }
20+
[Required]
21+
public string CardHolderName { get; set; }
22+
23+
[Required]
24+
public DateTime CardExpiration { get; set; }
25+
26+
[Required]
27+
public string CardSecurityNumber { get; set; }
28+
29+
public int CardTypeId { get; set; }
30+
31+
public string Buyer { get; set; }
32+
33+
[Required]
34+
public Guid RequestId { get; set; }
35+
}
36+
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBaske
4242
return result;
4343
}
4444

45+
public async Task CheckoutAsync(BasketCheckout basketCheckout, string token)
46+
{
47+
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint + "/checkout");
48+
49+
string uri = builder.ToString();
50+
51+
await _requestProvider.PostAsync(uri, basketCheckout, token);
52+
}
53+
4554
public async Task ClearBasketAsync(string guidUser, string token)
4655
{
4756
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public interface IBasketService
77
{
88
Task<CustomerBasket> GetBasketAsync(string guidUser, string token);
99
Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token);
10+
Task CheckoutAsync(BasketCheckout basketCheckout, string token);
1011
Task ClearBasketAsync(string guidUser, string token);
1112
}
1213
}
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
using System.Collections.ObjectModel;
1+
using eShopOnContainers.Core.Models.Basket;
2+
using System.Collections.ObjectModel;
23
using System.Threading.Tasks;
34

45
namespace eShopOnContainers.Core.Services.Order
56
{
67
public interface IOrderService
78
{
8-
Task CreateOrderAsync(Models.Orders.Order newOrder, string token);
9+
//Task CreateOrderAsync(Models.Orders.Order newOrder, string token);
910
Task<ObservableCollection<Models.Orders.Order>> GetOrdersAsync(string token);
1011
Task<Models.Orders.Order> GetOrderAsync(int orderId, string token);
1112
Task<ObservableCollection<Models.Orders.CardType>> GetCardTypesAsync(string token);
13+
BasketCheckout MapOrderToBasket(Models.Orders.Order order);
1214
}
1315
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using eShopOnContainers.Core.Extensions;
2+
using eShopOnContainers.Core.Models.Basket;
23
using eShopOnContainers.Core.Models.Orders;
34
using eShopOnContainers.Core.Models.User;
45
using System;
@@ -64,17 +65,18 @@ public class OrderMockService : IOrderService
6465
new CardType { Id = 3, Name = "MasterCard" },
6566
};
6667

67-
public async Task CreateOrderAsync(Models.Orders.Order newOrder, string token)
68+
private static BasketCheckout MockBasketCheckout = new BasketCheckout()
6869
{
69-
await Task.Delay(500);
70-
71-
if (!string.IsNullOrEmpty(token))
72-
{
73-
newOrder.OrderNumber = string.Format("{0}", MockOrders.Count + 1);
74-
75-
MockOrders.Insert(0, newOrder);
76-
}
77-
}
70+
CardExpiration = DateTime.UtcNow,
71+
CardHolderName = "FakeCardHolderName",
72+
CardNumber = "122333423224",
73+
CardSecurityNumber = "1234",
74+
CardTypeId = 1,
75+
City = "FakeCity",
76+
Country = "FakeCountry",
77+
ZipCode = "FakeZipCode",
78+
Street = "FakeStreet"
79+
};
7880

7981
public async Task<ObservableCollection<Models.Orders.Order>> GetOrdersAsync(string token)
8082
{
@@ -111,5 +113,10 @@ public async Task<ObservableCollection<CardType>> GetCardTypesAsync(string token
111113
else
112114
return new ObservableCollection<CardType>();
113115
}
116+
117+
public BasketCheckout MapOrderToBasket(Models.Orders.Order order)
118+
{
119+
return MockBasketCheckout;
120+
}
114121
}
115122
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderService.cs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using eShopOnContainers.Core.Services.RequestProvider;
1+
using eShopOnContainers.Core.Models.Basket;
2+
using eShopOnContainers.Core.Services.RequestProvider;
23
using System;
34
using System.Collections.ObjectModel;
45
using System.Threading.Tasks;
@@ -14,17 +15,6 @@ public OrderService(IRequestProvider requestProvider)
1415
_requestProvider = requestProvider;
1516
}
1617

17-
public async Task CreateOrderAsync(Models.Orders.Order newOrder, string token)
18-
{
19-
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.OrdersEndpoint);
20-
21-
builder.Path = "api/v1/orders/new";
22-
23-
string uri = builder.ToString();
24-
25-
await _requestProvider.PostAsync(uri, newOrder, token, "x-requestid");
26-
}
27-
2818
public async Task<ObservableCollection<Models.Orders.Order>> GetOrdersAsync(string token)
2919
{
3020

@@ -82,5 +72,21 @@ public async Task CreateOrderAsync(Models.Orders.Order newOrder, string token)
8272
return new ObservableCollection<Models.Orders.CardType>();
8373
}
8474
}
75+
76+
public BasketCheckout MapOrderToBasket(Models.Orders.Order order)
77+
{
78+
return new BasketCheckout()
79+
{
80+
CardExpiration = order.CardExpiration,
81+
CardHolderName = order.CardHolderName,
82+
CardNumber = order.CardNumber,
83+
CardSecurityNumber = order.CardSecurityNumber,
84+
CardTypeId = order.CardTypeId,
85+
City = order.ShippingCity,
86+
Country = order.ShippingCountry,
87+
ZipCode = order.ShippingZipCode,
88+
Street = order.ShippingStreet
89+
};
90+
}
8591
}
8692
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,10 @@ private async Task CheckoutAsync()
132132
{
133133
var authToken = Settings.AuthAccessToken;
134134

135-
// Create new order
136-
await _orderService.CreateOrderAsync(Order, authToken);
135+
var basket = _orderService.MapOrderToBasket(Order);
136+
137+
// Create basket checkout
138+
await _basketService.CheckoutAsync(basket, authToken);
137139

138140
// Clean Basket
139141
await _basketService.ClearBasketAsync(_shippingAddress.Id.ToString(), authToken);

src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
<Compile Include="Helpers\EasingHelper.cs" />
6666
<Compile Include="Helpers\ServicesHelper.cs" />
6767
<Compile Include="Helpers\Settings.cs" />
68+
<Compile Include="Models\Basket\BasketCheckout.cs" />
6869
<Compile Include="Models\Basket\BasketItem.cs" />
6970
<Compile Include="Models\Basket\CustomerBasket.cs" />
7071
<Compile Include="Models\Catalog\CatalogBrand.cs" />
@@ -260,6 +261,11 @@
260261
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
261262
</EmbeddedResource>
262263
</ItemGroup>
264+
<ItemGroup>
265+
<Reference Include="System.ComponentModel.Annotations">
266+
<HintPath>..\..\..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.6\Profile\Profile44\System.ComponentModel.Annotations.dll</HintPath>
267+
</Reference>
268+
</ItemGroup>
263269
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
264270
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
265271
<PropertyGroup>

src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/OrderStartedIntegrationEventHandler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Basket.API.IntegrationEvents.Events;
22
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions;
3+
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events;
34
using Microsoft.eShopOnContainers.Services.Basket.API.Model;
45
using System;
56
using System.Threading.Tasks;

src/Services/Basket/Basket.API/IntegrationEvents/Events/OrderStartedIntegrationEvent.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ namespace Basket.API.IntegrationEvents.Events
77
// An Integration Event is an event that can cause side effects to other microsrvices, Bounded-Contexts or external systems.
88
public class OrderStartedIntegrationEvent : IntegrationEvent
99
{
10-
public string UserId { get; }
10+
public string UserId { get; set; }
1111

12-
public OrderStartedIntegrationEvent(string userId) =>
13-
UserId = userId;
12+
public OrderStartedIntegrationEvent(string userId)
13+
=> UserId = userId;
1414
}
1515
}

0 commit comments

Comments
 (0)