Skip to content

Commit d8b0381

Browse files
author
R Hudylko
committed
Cancellation tokens initial implementation (OrderService)
1 parent 5fe3e62 commit d8b0381

File tree

4 files changed

+59
-50
lines changed

4 files changed

+59
-50
lines changed

Source/FikaAmazonAPI/AmazonSpApiSDK/Runtime/LWAClient.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using RestSharp;
44
using System;
55
using System.IO;
6+
using System.Threading;
67
using System.Threading.Tasks;
78

89
namespace FikaAmazonAPI.AmazonSpApiSDK.Runtime
@@ -31,7 +32,7 @@ public LWAClient(LWAAuthorizationCredentials lwaAuthorizationCredentials)
3132
/// </summary>
3233
/// <param name="lwaAccessTokenRequestMeta">LWA AccessTokenRequest metadata</param>
3334
/// <returns>LWA Access Token</returns>
34-
public virtual async Task<TokenResponse> GetAccessTokenAsync()
35+
public virtual async Task<TokenResponse> GetAccessTokenAsync(CancellationToken cancellationToken = default)
3536
{
3637
LWAAccessTokenRequestMeta lwaAccessTokenRequestMeta = LWAAccessTokenRequestMetaBuilder.Build(LWAAuthorizationCredentials);
3738
var accessTokenRequest = new RestRequest(LWAAuthorizationCredentials.Endpoint.AbsolutePath, RestSharp.Method.Post);
@@ -43,7 +44,7 @@ public virtual async Task<TokenResponse> GetAccessTokenAsync()
4344

4445
try
4546
{
46-
var response = await RestClient.ExecuteAsync(accessTokenRequest).ConfigureAwait(false);
47+
var response = await RestClient.ExecuteAsync(accessTokenRequest, cancellationToken).ConfigureAwait(false);
4748

4849
if (!IsSuccessful(response))
4950
{

Source/FikaAmazonAPI/Services/OrderService.cs

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using FikaAmazonAPI.Parameter.Order;
44
using FikaAmazonAPI.Search;
55
using System.Collections.Generic;
6+
using System.Threading;
67
using System.Threading.Tasks;
78

89
namespace FikaAmazonAPI.Services
@@ -18,7 +19,7 @@ public OrderService(AmazonCredential amazonCredential) : base(amazonCredential)
1819

1920
public OrderList GetOrders(ParameterOrderList searchOrderList) =>
2021
Task.Run(() => GetOrdersAsync(searchOrderList)).ConfigureAwait(false).GetAwaiter().GetResult();
21-
public async Task<OrderList> GetOrdersAsync(ParameterOrderList searchOrderList)
22+
public async Task<OrderList> GetOrdersAsync(ParameterOrderList searchOrderList, CancellationToken cancellationToken = default)
2223
{
2324

2425
var orderList = new OrderList();
@@ -46,8 +47,8 @@ public async Task<OrderList> GetOrdersAsync(ParameterOrderList searchOrderList)
4647

4748
var queryParameters = searchOrderList.getParameters();
4849

49-
await CreateAuthorizedRequestAsync(OrdersApiUrls.Orders, RestSharp.Method.Get, queryParameters, parameter: searchOrderList);
50-
var response = await ExecuteRequestAsync<GetOrdersResponse>(Utils.RateLimitType.Order_GetOrders);
50+
await CreateAuthorizedRequestAsync(OrdersApiUrls.Orders, RestSharp.Method.Get, queryParameters, parameter: searchOrderList, cancellationToken: cancellationToken);
51+
var response = await ExecuteRequestAsync<GetOrdersResponse>(Utils.RateLimitType.Order_GetOrders, cancellationToken);
5152
var nextToken = response.Payload.NextToken;
5253
orderList = response.Payload.Orders;
5354
int PageCount = 1;
@@ -59,10 +60,12 @@ public async Task<OrderList> GetOrdersAsync(ParameterOrderList searchOrderList)
5960
{
6061
while (!string.IsNullOrEmpty(nextToken))
6162
{
62-
var orderPayload = GetGetOrdersByNextToken(nextToken, searchOrderList);
63+
var orderPayload = await GetGetOrdersByNextTokenAsync(nextToken, searchOrderList, cancellationToken);
6364
orderList.AddRange(orderPayload.Orders);
6465
nextToken = orderPayload.NextToken;
6566

67+
cancellationToken.ThrowIfCancellationRequested();
68+
6669
if (searchOrderList.MaxNumberOfPages.HasValue)
6770
{
6871
PageCount++;
@@ -77,22 +80,22 @@ public async Task<OrderList> GetOrdersAsync(ParameterOrderList searchOrderList)
7780

7881
public OrdersList GetGetOrdersByNextToken(string nextToken, ParameterOrderList searchOrderList) =>
7982
Task.Run(() => GetGetOrdersByNextTokenAsync(nextToken, searchOrderList)).ConfigureAwait(false).GetAwaiter().GetResult();
80-
public async Task<OrdersList> GetGetOrdersByNextTokenAsync(string nextToken, ParameterOrderList searchOrderList)
83+
public async Task<OrdersList> GetGetOrdersByNextTokenAsync(string nextToken, ParameterOrderList searchOrderList, CancellationToken cancellationToken = default)
8184
{
8285
List<KeyValuePair<string, string>> queryParameters = new List<KeyValuePair<string, string>>();
8386
queryParameters.Add(new KeyValuePair<string, string>("NextToken", nextToken));
8487
queryParameters.Add(new KeyValuePair<string, string>("MarketplaceIds", string.Join(",", searchOrderList.MarketplaceIds)));
8588

86-
await CreateAuthorizedRequestAsync(OrdersApiUrls.Orders, RestSharp.Method.Get, queryParameters, parameter: searchOrderList);
87-
var response = await ExecuteRequestAsync<GetOrdersResponse>(Utils.RateLimitType.Order_GetOrders);
89+
await CreateAuthorizedRequestAsync(OrdersApiUrls.Orders, RestSharp.Method.Get, queryParameters, parameter: searchOrderList, cancellationToken: cancellationToken);
90+
var response = await ExecuteRequestAsync<GetOrdersResponse>(Utils.RateLimitType.Order_GetOrders, cancellationToken);
8891
return response.Payload;
8992
}
9093

9194
#endregion
9295

9396
public Order GetOrder(ParameterGetOrder parameter) =>
9497
Task.Run(() => GetOrderAsync(parameter)).ConfigureAwait(false).GetAwaiter().GetResult();
95-
public async Task<Order> GetOrderAsync(ParameterGetOrder parameter)
98+
public async Task<Order> GetOrderAsync(ParameterGetOrder parameter, CancellationToken cancellationToken = default)
9699
{
97100
if (parameter.IsNeedRestrictedDataToken && parameter.RestrictedDataTokenRequest == null)
98101
{
@@ -109,15 +112,15 @@ public async Task<Order> GetOrderAsync(ParameterGetOrder parameter)
109112
parameter.RestrictedDataTokenRequest = createRDT;
110113
}
111114

112-
await CreateAuthorizedRequestAsync(OrdersApiUrls.Order(parameter.OrderId), RestSharp.Method.Get, parameter: parameter);
113-
var response = await ExecuteRequestAsync<GetOrderResponse>(Utils.RateLimitType.Order_GetOrder);
115+
await CreateAuthorizedRequestAsync(OrdersApiUrls.Order(parameter.OrderId), RestSharp.Method.Get, parameter: parameter, cancellationToken: cancellationToken);
116+
var response = await ExecuteRequestAsync<GetOrderResponse>(Utils.RateLimitType.Order_GetOrder, cancellationToken);
114117
if (response != null && response.Payload != null)
115118
return response.Payload;
116119
else return null;
117120
}
118121
public OrderItemList GetOrderItems(string orderId, IParameterBasedPII parameterBasedPII = null) =>
119122
Task.Run(() => GetOrderItemsAsync(orderId, parameterBasedPII)).ConfigureAwait(false).GetAwaiter().GetResult();
120-
public async Task<OrderItemList> GetOrderItemsAsync(string orderId, IParameterBasedPII ParameterBasedPII = null)
123+
public async Task<OrderItemList> GetOrderItemsAsync(string orderId, IParameterBasedPII ParameterBasedPII = null, CancellationToken cancellationToken = default)
121124
{
122125
var orderItemList = new OrderItemList();
123126

@@ -135,56 +138,58 @@ public async Task<OrderItemList> GetOrderItemsAsync(string orderId, IParameterBa
135138
ParameterBasedPII.RestrictedDataTokenRequest = createRDT;
136139
}
137140

138-
await CreateAuthorizedRequestAsync(OrdersApiUrls.OrderItems(orderId), RestSharp.Method.Get, parameter: ParameterBasedPII);
139-
var response = await ExecuteRequestAsync<GetOrderItemsResponse>(Utils.RateLimitType.Order_GetOrderItems);
141+
await CreateAuthorizedRequestAsync(OrdersApiUrls.OrderItems(orderId), RestSharp.Method.Get, parameter: ParameterBasedPII, cancellationToken: cancellationToken);
142+
var response = await ExecuteRequestAsync<GetOrderItemsResponse>(Utils.RateLimitType.Order_GetOrderItems, cancellationToken);
140143
var nextToken = response.Payload.NextToken;
141144
orderItemList.AddRange(response.Payload.OrderItems);
142145
while (!string.IsNullOrEmpty(nextToken))
143146
{
144-
var orderItemPayload = GetOrderItemsNextToken(orderId, nextToken);
147+
var orderItemPayload = await GetOrderItemsNextTokenAsync(orderId, nextToken, cancellationToken);
145148
orderItemList.AddRange(orderItemPayload.OrderItems);
146149
nextToken = orderItemPayload.NextToken;
150+
151+
cancellationToken.ThrowIfCancellationRequested();
147152
}
148153
return orderItemList;
149154
}
150155

151156
public OrderItemsList GetOrderItemsNextToken(string orderId, string nextToken) =>
152157
Task.Run(() => GetOrderItemsNextTokenAsync(orderId, nextToken)).ConfigureAwait(false).GetAwaiter().GetResult();
153-
public async Task<OrderItemsList> GetOrderItemsNextTokenAsync(string orderId, string nextToken)
158+
public async Task<OrderItemsList> GetOrderItemsNextTokenAsync(string orderId, string nextToken, CancellationToken cancellationToken = default)
154159
{
155160
List<KeyValuePair<string, string>> queryParameters = new List<KeyValuePair<string, string>>();
156161
queryParameters.Add(new KeyValuePair<string, string>("NextToken", nextToken));
157162

158163

159-
await CreateAuthorizedRequestAsync(OrdersApiUrls.OrderItems(orderId), RestSharp.Method.Get, queryParameters);
160-
var response = await ExecuteRequestAsync<GetOrderItemsResponse>(Utils.RateLimitType.Order_GetOrderItems);
164+
await CreateAuthorizedRequestAsync(OrdersApiUrls.OrderItems(orderId), RestSharp.Method.Get, queryParameters, cancellationToken: cancellationToken);
165+
var response = await ExecuteRequestAsync<GetOrderItemsResponse>(Utils.RateLimitType.Order_GetOrderItems, cancellationToken);
161166
return response.Payload;
162167
}
163168

164169
public OrderBuyerInfo GetOrderBuyerInfo(string orderId, List<KeyValuePair<string, string>> queryParameters = null) =>
165170
Task.Run(() => GetOrderBuyerInfoAsync(orderId, queryParameters)).ConfigureAwait(false).GetAwaiter().GetResult();
166-
public async Task<OrderBuyerInfo> GetOrderBuyerInfoAsync(string orderId, List<KeyValuePair<string, string>> queryParameters = null)
171+
public async Task<OrderBuyerInfo> GetOrderBuyerInfoAsync(string orderId, List<KeyValuePair<string, string>> queryParameters = null, CancellationToken cancellationToken = default)
167172
{
168-
await CreateAuthorizedRequestAsync(OrdersApiUrls.OrderBuyerInfo(orderId), RestSharp.Method.Get, queryParameters);
169-
var response = await ExecuteRequestAsync<GetOrderBuyerInfoResponse>(Utils.RateLimitType.Order_GetOrderBuyerInfo);
173+
await CreateAuthorizedRequestAsync(OrdersApiUrls.OrderBuyerInfo(orderId), RestSharp.Method.Get, queryParameters, cancellationToken: cancellationToken);
174+
var response = await ExecuteRequestAsync<GetOrderBuyerInfoResponse>(Utils.RateLimitType.Order_GetOrderBuyerInfo, cancellationToken);
170175
return response.Payload;
171176
}
172177

173178
public OrderItemsBuyerInfoList GetOrderItemsBuyerInfo(string orderId) =>
174179
Task.Run(() => GetOrderItemsBuyerInfoAsync(orderId)).ConfigureAwait(false).GetAwaiter().GetResult();
175-
public async Task<OrderItemsBuyerInfoList> GetOrderItemsBuyerInfoAsync(string orderId)
180+
public async Task<OrderItemsBuyerInfoList> GetOrderItemsBuyerInfoAsync(string orderId, CancellationToken cancellationToken = default)
176181
{
177-
await CreateAuthorizedRequestAsync(OrdersApiUrls.OrderItemsBuyerInfo(orderId), RestSharp.Method.Get);
178-
var response = await ExecuteRequestAsync<GetOrderItemsBuyerInfoResponse>(Utils.RateLimitType.Order_GetOrderItemsBuyerInfo);
182+
await CreateAuthorizedRequestAsync(OrdersApiUrls.OrderItemsBuyerInfo(orderId), RestSharp.Method.Get, cancellationToken: cancellationToken);
183+
var response = await ExecuteRequestAsync<GetOrderItemsBuyerInfoResponse>(Utils.RateLimitType.Order_GetOrderItemsBuyerInfo, cancellationToken);
179184
return response.Payload;
180185
}
181186

182187
public Address GetOrderAddress(string orderId) =>
183188
Task.Run(() => GetOrderAddressAsync(orderId)).ConfigureAwait(false).GetAwaiter().GetResult();
184-
public async Task<Address> GetOrderAddressAsync(string orderId)
189+
public async Task<Address> GetOrderAddressAsync(string orderId, CancellationToken cancellationToken = default)
185190
{
186-
await CreateAuthorizedRequestAsync(OrdersApiUrls.OrderShipmentInfo(orderId), RestSharp.Method.Get);
187-
var response = await ExecuteRequestAsync<GetOrderAddressResponse>(Utils.RateLimitType.Order_GetOrderAddress);
191+
await CreateAuthorizedRequestAsync(OrdersApiUrls.OrderShipmentInfo(orderId), RestSharp.Method.Get, cancellationToken: cancellationToken);
192+
var response = await ExecuteRequestAsync<GetOrderAddressResponse>(Utils.RateLimitType.Order_GetOrderAddress, cancellationToken);
188193
return response.Payload.ShippingAddress;
189194
}
190195
}

0 commit comments

Comments
 (0)