/// <summary> /// Retrieves specific order made by a customer from persistence. /// </summary> /// <param name="orderId">The order ID.</param> /// <param name="customerId">The customer ID.</param> /// <returns>The customer's order.</returns> public async Task <OrderViewModel> RetrieveAsync(string orderId, string customerId) { orderId.AssertNotEmpty(nameof(orderId)); customerId.AssertNotEmpty(nameof(customerId)); CloudTable customerOrdersTable = await ApplicationDomain.AzureStorageService.GetCustomerOrdersTableAsync().ConfigureAwait(false); string tableQueryFilter = TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, customerId), TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, orderId)); TableQuery <CustomerOrderTableEntity> getCustomerOrdersQuery = new TableQuery <CustomerOrderTableEntity>().Where(tableQueryFilter); TableQuerySegment <CustomerOrderTableEntity> resultSegment = null; OrderViewModel customerOrder = null; do { resultSegment = await customerOrdersTable.ExecuteQuerySegmentedAsync(getCustomerOrdersQuery, resultSegment?.ContinuationToken).ConfigureAwait(false); foreach (CustomerOrderTableEntity orderResult in resultSegment.AsEnumerable()) { if (orderResult.RowKey == orderId) { customerOrder = JsonConvert.DeserializeObject <OrderViewModel>(orderResult.OrderBlob); } } }while (resultSegment.ContinuationToken != null); return(customerOrder); }
/// <summary> /// Retrieves customer registration details from persistence. /// </summary> /// <param name="customerGuid">The customer ID.</param> /// <returns>The customer's registration details.</returns> public async Task <CustomerViewModel> RetrieveAsync(string customerGuid) { customerGuid.AssertNotEmpty(nameof(customerGuid)); var customerRegistrationTable = await this.ApplicationDomain.AzureStorageService.GetCustomerRegistrationTableAsync(); string tableQueryFilter = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, customerGuid); var getCustomerOrdersQuery = new TableQuery <CustomerRegistrationTableEntity>().Where(tableQueryFilter); TableQuerySegment <CustomerRegistrationTableEntity> resultSegment = null; CustomerViewModel customerRegistrationInfo = null; resultSegment = await customerRegistrationTable.ExecuteQuerySegmentedAsync <CustomerRegistrationTableEntity>(getCustomerOrdersQuery, resultSegment?.ContinuationToken); do { resultSegment = await customerRegistrationTable.ExecuteQuerySegmentedAsync <CustomerRegistrationTableEntity>(getCustomerOrdersQuery, resultSegment?.ContinuationToken); foreach (var customerResult in resultSegment.AsEnumerable()) { if (customerResult.RowKey == customerGuid) { customerRegistrationInfo = JsonConvert.DeserializeObject <CustomerViewModel>(customerResult.CustomerRegistrationBlob); } } }while (resultSegment.ContinuationToken != null); return(customerRegistrationInfo); }
/// <summary> /// Retrieves all customer subscriptions. /// </summary> /// <param name="customerId">The ID of the customer who owns the subscriptions.</param> /// <returns>A list of customer subscriptions.</returns> public async Task <IEnumerable <CustomerSubscriptionEntity> > RetrieveAsync(string customerId) { customerId.AssertNotEmpty(nameof(customerId)); var customerSubscriptionsTable = await this.ApplicationDomain.AzureStorageService.GetCustomerSubscriptionsTableAsync(); var getCustomerSubscriptionsQuery = new TableQuery <CustomerSubscriptionTableEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, customerId)); TableQuerySegment <CustomerSubscriptionTableEntity> resultSegment = null; ICollection <CustomerSubscriptionEntity> customerSubscriptions = new List <CustomerSubscriptionEntity>(); do { resultSegment = await customerSubscriptionsTable.ExecuteQuerySegmentedAsync <CustomerSubscriptionTableEntity>(getCustomerSubscriptionsQuery, resultSegment?.ContinuationToken); foreach (var customerSubscriptionResult in resultSegment.AsEnumerable()) { customerSubscriptions.Add(new CustomerSubscriptionEntity( customerSubscriptionResult.PartitionKey, customerSubscriptionResult.RowKey, customerSubscriptionResult.PartnerOfferId, customerSubscriptionResult.ExpiryDate)); } }while (resultSegment.ContinuationToken != null); return(customerSubscriptions); }
/// <summary> /// Retrieves all purchases made by a customer from persistence. /// </summary> /// <param name="customerId">The customer ID.</param> /// <returns>The customer's purchases.</returns> public async Task <IEnumerable <CustomerPurchaseEntity> > RetrieveAsync(string customerId) { customerId.AssertNotEmpty(nameof(customerId)); var customerPurchasesTable = await this.ApplicationDomain.AzureStorageService.GetCustomerPurchasesTableAsync(); var getCustomerPurchasesQuery = new TableQuery <CustomerPurchaseTableEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, customerId)); TableQuerySegment <CustomerPurchaseTableEntity> resultSegment = null; ICollection <CustomerPurchaseEntity> customerPurchases = new List <CustomerPurchaseEntity>(); do { resultSegment = await customerPurchasesTable.ExecuteQuerySegmentedAsync <CustomerPurchaseTableEntity>(getCustomerPurchasesQuery, resultSegment?.ContinuationToken); foreach (var customerPurchaseResult in resultSegment.AsEnumerable()) { customerPurchases.Add(new CustomerPurchaseEntity( (CommerceOperationType)Enum.Parse(typeof(CommerceOperationType), customerPurchaseResult.PurchaseType, true), customerPurchaseResult.RowKey, customerPurchaseResult.PartitionKey, customerPurchaseResult.SubscriptionId, customerPurchaseResult.SeatsBought, decimal.Parse(customerPurchaseResult.SeatPrice), customerPurchaseResult.TransactionDate)); } }while (resultSegment.ContinuationToken != null); return(customerPurchases); }