Exemple #1
0
        public async Task <JsonResult> DeleteSubscriptions([FromBody] DeleteSubscriptionsDTO deleteSubscriptionsDto)
        {
            try
            {
                var results = new List <Result>();
                // we do not use the automatic integration of fluentValidation into ASP.NET Core (validating objects that are passed in to controller actions), as we want to add ALL valid releases and not stop and throw if one is invalid)
                var subscriptionValidator = new DeleteSubscriptionValidator(_trackedMediaSettings);
                foreach (var deleteSubscription in deleteSubscriptionsDto.Subscriptions)
                {
                    var validationResult = await subscriptionValidator.ValidateAsync(deleteSubscription);

                    if (validationResult.IsValid)
                    {
                        results.Add(await _subscriptionService.DeleteSubscription(deleteSubscription.MediaName, deleteSubscriptionsDto.NotificationEndpointIdentifier));
                    }
                    else
                    {
                        results.Add(Result.Failure(validationResult.GetMessage()));
                    }
                }
                return(new JsonResult(results.Select(r => r.AsSerializableResult())));
            }
            catch (Exception e)
            {
                _logger.LogError("Something went wrong. {exceptionMessage}", e.Message);
                return(new JsonResult(Result.Failure("Deleting the subscriptions failed.").AsSerializableResult()));
            }
        }
        public async Task <Result> Unsubscribe(DeleteSubscriptionsDTO deleteSubscriptionsDto)
        {
            var message = new HttpRequestMessage(HttpMethod.Delete, "subscription");

            message.Content = new StringContent(JsonHandler.Serialize(deleteSubscriptionsDto), Encoding.UTF8,
                                                "application/json");
            var response = await SendRequest(message);

            if (response.IsFailure)
            {
                return(Result.Failure("Unsubscribe failed."));
            }
            var deserializeResult =
                JsonHandler.Deserialize <List <SerializableResult> >(await response.Value.Content.ReadAsStringAsync());

            if (deserializeResult.IsFailure)
            {
                _logger.LogError("Deserialization failed due to: {errorDetails}.", deserializeResult.Error);
                return(Result.Failure("Deserialization failed."));
            }

            var failedSubscriptionCancellations = deserializeResult.Value.Where(r => !r.IsSuccess).ToList();

            if (failedSubscriptionCancellations.Any())
            {
                _logger.LogError("Unsubscribe failed due to: {errorDetails}", string.Join('\n', failedSubscriptionCancellations.Select(fSub => fSub.Error)));
                return(Result.Failure("Unsubscribe failed."));
            }

            return(Result.Success());
        }
Exemple #3
0
        public async Task Unsubscribe(params string[] mediaNames)
        {
            if (mediaNames == null || mediaNames.Length < 1)
            {
                await Context.Channel.SendMessageAsync("Nothing to do.");
            }
            var notificationEndpointNotifierIdentifier = GetNotificationEndpointNotifierIdentifier(Context);
            var deleteSubscriptionDtos = mediaNames.Select(mediaName => new DeleteSubscriptionDTO(mediaName)).ToList();
            var deleteSubscriptionsDto = new DeleteSubscriptionsDTO(notificationEndpointNotifierIdentifier, deleteSubscriptionDtos);
            var result = await _vrPersistenceClient.Unsubscribe(deleteSubscriptionsDto);

            var message = result.IsFailure
                ? "Something went wrong."
                : "Successfully unsubscribed.";
            await Context.Channel.SendMessageAsync(message);
        }