Beispiel #1
0
        public static bool IsValidationFailed(this IDispatchResult dispatchResult, out IEnumerable <ValidationResult> validationResults)
        {
            if (IsAggregateResult(dispatchResult, out var aggregateDispatchResult))
            {
                var innerResults = aggregateDispatchResult.Flatten().DispatchResults;

                if (!innerResults.Any(p => p is ValidationFailureDispatchResult))
                {
                    validationResults = Enumerable.Empty <ValidationResult>();
                    return(false);
                }

                var validationFailureDispatchResults = innerResults.Select(p => p is ValidationFailureDispatchResult);

                validationResults = validationFailureDispatchResults.OfType <ValidationFailureDispatchResult>().SelectMany(p => p.ValidationResults);
                return(true);
            }

            if (dispatchResult is ValidationFailureDispatchResult validationFailureDispatchResult)
            {
                validationResults = validationFailureDispatchResult.ValidationResults;
                return(true);
            }

            validationResults = Enumerable.Empty <ValidationResult>();
            return(false);
        }
Beispiel #2
0
        public static bool IsNotAuthenticated(this IDispatchResult dispatchResult)
        {
            if (IsAggregateResult(dispatchResult, out var aggregateDispatchResult))
            {
                return(aggregateDispatchResult.Flatten().DispatchResults.Any(p => p is NotAuthenticatedDispatchResult));
            }

            return(dispatchResult is NotAuthenticatedDispatchResult);
        }
Beispiel #3
0
        public static bool IsValidationFailed(this IDispatchResult dispatchResult)
        {
            if (IsAggregateResult(dispatchResult, out var aggregateDispatchResult))
            {
                return(aggregateDispatchResult.Flatten().DispatchResults.Any(p => p is ValidationFailureDispatchResult));
            }

            return(dispatchResult is ValidationFailureDispatchResult);
        }
Beispiel #4
0
        public static bool IsConcurrencyIssue(this IDispatchResult dispatchResult)
        {
            if (IsAggregateResult(dispatchResult, out var aggregateDispatchResult))
            {
                return(aggregateDispatchResult.Flatten().DispatchResults.Any(p => p is ConcurrencyIssueDispatchResult));
            }

            return(dispatchResult is ConcurrencyIssueDispatchResult);
        }
Beispiel #5
0
        public static bool IsEntityNotFound(this IDispatchResult dispatchResult)
        {
            if (IsAggregateResult(dispatchResult, out var aggregateDispatchResult))
            {
                return(aggregateDispatchResult.Flatten().DispatchResults.Any(p => p is EntityNotFoundDispatchResult));
            }

            return(dispatchResult is EntityNotFoundDispatchResult);
        }
Beispiel #6
0
        public static bool IsTimeout(this IDispatchResult dispatchResult)
        {
            if (IsAggregateResult(dispatchResult, out var aggregateDispatchResult))
            {
                return(aggregateDispatchResult.Flatten().DispatchResults.Any(p => p is TimeoutDispatchResult));
            }

            return(dispatchResult is TimeoutDispatchResult);
        }
Beispiel #7
0
        public static bool IsEntityAlreadPresent(this IDispatchResult dispatchResult)
        {
            if (IsAggregateResult(dispatchResult, out var aggregateDispatchResult))
            {
                return(aggregateDispatchResult.Flatten().DispatchResults.Any(p => p is EntityAlreadyPresentDispatchResult));
            }

            return(dispatchResult is EntityAlreadyPresentDispatchResult);
        }
Beispiel #8
0
        private IActionResult GetActionResult <TModel>(IDispatchResult dispatchResult, TModel model)
        {
            if (dispatchResult.IsValidationFailed(out var validationResults))
            {
                AddModelError(validationResults);
                return(View(model));
            }

            return(GetActionResult(dispatchResult));
        }
Beispiel #9
0
        public static bool IsDispatchFailure(this IDispatchResult dispatchResult, out Type messageType)
        {
            if (dispatchResult is DispatchFailureDispatchResult dispatchFailure)
            {
                messageType = dispatchFailure.MessageType;
                return(true);
            }

            messageType = default;
            return(false);
        }
Beispiel #10
0
        public static bool IsAggregateResult(this IDispatchResult dispatchResult, out IAggregateDispatchResult aggregateDispatchResult)
        {
            if (dispatchResult is IAggregateDispatchResult aggregateDispatchResult2)
            {
                aggregateDispatchResult = aggregateDispatchResult2;
                return(true);
            }

            aggregateDispatchResult = default;
            return(false);
        }
        private void SerializeDispatchResult(IMessage message, IDispatchResult dispatchResult)
        {
            Assert(message != null);
            Assert(dispatchResult != null);

            using (var stream = message.PushFrame().OpenStream())
                using (var writer = new StreamWriter(stream))
                    using (var jsonWriter = new JsonTextWriter(writer))
                    {
                        Serializer.Serialize(jsonWriter, dispatchResult, typeof(IDispatchResult));
                    }
        }
Beispiel #12
0
 private static void GetResultFromNonAggregate <TResult>(IDispatchResult dispatchResult,
                                                         bool throwOnFailure,
                                                         ICollection <TResult> results)
 {
     if (dispatchResult.IsSuccessWithResult <TResult>(out var singleResult))
     {
         results.Add(singleResult);
     }
     else if (throwOnFailure)
     {
         throw new FailureOrTypeMismatchException();
     }
 }
Beispiel #13
0
        public static bool IsSuccessWithResult <TResult>(this IDispatchResult dispatchResult, out TResult result)
        {
            if (IsAggregateResult(dispatchResult, out var aggregateDispatchResult))
            {
                dispatchResult = aggregateDispatchResult.Flatten()
                                 .DispatchResults
                                 .OfType <IDispatchResult <TResult> >()
                                 .FirstOrDefault();
            }

            if (dispatchResult.IsSuccess && dispatchResult is IDispatchResult <TResult> typedDispatchResult)
            {
                result = typedDispatchResult.Result;
                return(true);
            }

            result = default;
            return(false);
        }
Beispiel #14
0
        private IActionResult GetActionResult(IDispatchResult dispatchResult)
        {
            if (dispatchResult.IsNotFound())
            {
                return(NotFound());
            }

            if (dispatchResult.IsNotAuthenticated())
            {
                return(StatusCode(401)); // TODO: Rediect to authentication page
            }

            if (dispatchResult.IsNotAuthorized())
            {
                return(Forbid());
            }

            return(StatusCode(500));
        }
Beispiel #15
0
        public static bool IsTimeout(this IDispatchResult dispatchResult, out DateTime dueTime)
        {
            if (IsAggregateResult(dispatchResult, out var aggregateDispatchResult))
            {
                dispatchResult = aggregateDispatchResult.Flatten()
                                 .DispatchResults
                                 .OfType <TimeoutDispatchResult>()
                                 .FirstOrDefault();
            }

            if (dispatchResult is TimeoutDispatchResult timeoutDispatchResult)
            {
                dueTime = timeoutDispatchResult.DueTime;
                return(true);
            }

            dueTime = default;
            return(false);
        }
Beispiel #16
0
        public static IEnumerable <TResult> GetResults <TResult>(this IDispatchResult dispatchResult, bool throwOnFailure)
        {
            if (dispatchResult.IsAggregateResult(out var aggregateDispatchResult))
            {
                var flattenedDispatchResult = aggregateDispatchResult.Flatten();
                return(GetResultsFromFlattened <TResult>(flattenedDispatchResult, throwOnFailure));
            }

            if (dispatchResult.IsSuccessWithResult <TResult>(out var result))
            {
                return(Enumerable.Repeat(result, count: 1));
            }

            if (throwOnFailure)
            {
                throw new FailureOrTypeMismatchException();
            }

            return(Enumerable.Empty <TResult>());
        }
Beispiel #17
0
        public static bool IsSuccess <TResult>(this IDispatchResult dispatchResult, out TResult result)
        {
            if (IsAggregateResult(dispatchResult, out var aggregateDispatchResult))
            {
                var dispatchResults = aggregateDispatchResult.Flatten()
                                      .DispatchResults
                                      .Where(p => p.IsSuccess);

                result = default;
                if (dispatchResults.Any())
                {
                    var typedDispatchResult = dispatchResults.OfType <IDispatchResult <TResult> >().FirstOrDefault();

                    if (typedDispatchResult != null)
                    {
                        result = typedDispatchResult.Result;
                    }

                    return(true);
                }

                return(false);
            }

            if (dispatchResult.IsSuccess)
            {
                if (dispatchResult is IDispatchResult <TResult> typedDispatchResult)
                {
                    result = typedDispatchResult.Result;
                }
                else
                {
                    result = default;
                }

                return(true);
            }

            result = default;
            return(false);
        }
Beispiel #18
0
        public static bool IsEntityAlreadPresent(this IDispatchResult dispatchResult, out Type entityType, out string id)
        {
            if (IsAggregateResult(dispatchResult, out var aggregateDispatchResult))
            {
                dispatchResult = aggregateDispatchResult.Flatten()
                                 .DispatchResults
                                 .OfType <EntityAlreadyPresentDispatchResult>()
                                 .FirstOrDefault();
            }

            if (dispatchResult is EntityAlreadyPresentDispatchResult entityAlreadyPresentDispatchResult)
            {
                entityType = entityAlreadyPresentDispatchResult.EntityType;
                id         = entityAlreadyPresentDispatchResult.Id;
                return(true);
            }

            entityType = default;
            id         = default;

            return(false);
        }
Beispiel #19
0
 public AggregateDispatchResult(IDispatchResult dispatchResult, IReadOnlyDictionary <string, object> resultData)
     : this((dispatchResult ?? throw new ArgumentNullException(nameof(dispatchResult))).Yield(), resultData)
Beispiel #20
0
 public virtual FailureDispatchResult Failure(string message, IDispatchResult underlyingResult) // TODO
 {
     return(new FailureDispatchResult(message));
 }
Beispiel #21
0
 public static bool IsAggregateResult(this IDispatchResult dispatchResult)
 {
     return(dispatchResult is IAggregateDispatchResult);
 }
Beispiel #22
0
 public static bool IsSuccessWithResult(this IDispatchResult dispatchResult, out object result)
 {
     return(dispatchResult.IsSuccessWithResult <object>(out result));
 }
Beispiel #23
0
 public static bool IsDispatchFailure(this IDispatchResult dispatchResult)
 {
     return(dispatchResult is DispatchFailureDispatchResult);
 }