/// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }