/// <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); } }
/// <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); } }
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); }