예제 #1
0
        /// <summary>
        /// Cancel a subscription
        /// </summary>
        /// <param name="subscriptionId">The subscription id</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <FulfillmentManagerOperationResult> RequestCancelSubscriptionAsync(
            Guid subscriptionId,
            CancellationToken cancellationToken = default)
        {
            try
            {
                _logger.LogInformation(
                    LoggingUtils.ComposeHttpClientLogMessage(
                        _fulfillmentClient.GetType().Name,
                        nameof(_fulfillmentClient.DeleteSubscriptionAsync),
                        subscriptionId));

                Guid requestId     = Guid.NewGuid();
                Guid correlationId = Guid.NewGuid();

                UpdateOrDeleteSubscriptionRequestResult response = await _fulfillmentClient.DeleteSubscriptionAsync(
                    subscriptionId,
                    requestId,
                    correlationId,
                    cancellationToken);

                _logger.LogInformation($"Cancelled subscription {subscriptionId}.");
                return(FulfillmentManagerOperationResult.Success);
            }
            catch (Exception e)
            {
                var errorMessage = $"Cannot cancel subscription {subscriptionId}.";
                throw new LunaFulfillmentException(errorMessage, e);
            }
        }
예제 #2
0
        /// <summary>
        /// Update a subscription
        /// </summary>
        /// <param name="subscriptionId">The subscription id</param>
        /// <param name="planId">The plan id</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <FulfillmentManagerOperationResult> RequestUpdateSubscriptionAsync(
            Guid subscriptionId,
            string planId,
            CancellationToken cancellationToken = default)
        {
            try
            {
                _logger.LogInformation(
                    LoggingUtils.ComposeHttpClientLogMessage(
                        _fulfillmentClient.GetType().Name,
                        nameof(_fulfillmentClient.UpdateSubscriptionAsync),
                        subscriptionId));

                Guid requestId     = Guid.NewGuid();
                Guid correlationId = Guid.NewGuid();

                ActivatedSubscriptionResult activatedSubscription = new ActivatedSubscriptionResult {
                    PlanId = planId
                };

                UpdateOrDeleteSubscriptionRequestResult response = await _fulfillmentClient.UpdateSubscriptionAsync(
                    subscriptionId,
                    activatedSubscription,
                    requestId,
                    correlationId,
                    cancellationToken);

                _logger.LogInformation(
                    LoggingUtils.ComposeSubscriptionActionMessage(
                        "Updated",
                        subscriptionId,
                        activatedSubscription.PlanId,
                        activatedSubscription.Quantity));

                SubscriptionOperation operation = await _fulfillmentClient.GetSubscriptionOperationAsync(
                    subscriptionId,
                    response.OperationId,
                    requestId,
                    correlationId,
                    cancellationToken);

                FulfillmentManagerOperationResult returnResult = FulfillmentManagerOperationResult.Success;
                returnResult.Operation = operation;

                return(returnResult);
            }
            catch (Exception e)
            {
                var errorMessage = $"Cannot update subscription {subscriptionId}.";
                throw new LunaFulfillmentException(errorMessage, e);
            }
        }
예제 #3
0
        public async Task RecordAsync(
            Guid subscriptionId,
            UpdateOrDeleteSubscriptionRequestResult result,
            CancellationToken cancellationToken = default)
        {
            var table = this.tableClient.GetTableReference(TableName);
            await table.CreateIfNotExistsAsync(cancellationToken);

            var entity = new OperationRecord(subscriptionId.ToString(), result.OperationId.ToString());

            var tableOperation = TableOperation.InsertOrMerge(entity);

            await table.ExecuteAsync(tableOperation, cancellationToken);
        }