Esempio n. 1
0
        public OrderPromoteCommandValidator(IGenericReadRepository readRepository, IOrderFiltersProvider orderFiltersProvider, IOrderRelationsProvider orderRelationsProvider) : base(readRepository)
        {
            _orderFiltersProvider = orderFiltersProvider;

            RuleFor(x => x.OrderId)
            .NotEmptyWithMessage()
            .MustExistsWithMessageAsync(OrderExists)
            .CustomAsync(async(orderId, context, cancellationToken) =>
            {
                var query     = await ReadRepository.GetQueryableAsync(_orderFiltersProvider.ById(orderId), orderRelationsProvider.JoinDeliveryRequest);
                var orderInfo = query
                                .Select(x => new
                {
                    OrderStatus           = x.StatusId,
                    DeliveryRequestStatus = x.DeliveryRequest != null ? x.DeliveryRequest.StatusId : (int?)null
                })
                                .FirstOrDefault();

                if ((OrderStatuses)orderInfo.OrderStatus == OrderStatuses.Completed)
                {
                    context.AddFailure(nameof(OrderPromoteCommand.OrderId), "Order is completed.");
                    return;
                }

                if (orderInfo.DeliveryRequestStatus.HasValue && (DeliveryRequestStatuses)orderInfo.DeliveryRequestStatus != DeliveryRequestStatuses.Closed)
                {
                    context.AddFailure(nameof(OrderPromoteCommand.OrderId), "You cannot promote the order until the corresponding delivery request is completed.");
                }
            });
        }
 public OrderQueryFunctionality(IUnitOfWork unitOfWork, IMapperFactory mapperFactory, IGenericReadRepository readRepository, IOrderFiltersProvider filtersProvider, IOrderRelationsProvider relationsProvider) : base(unitOfWork, mapperFactory, readRepository)
 {
     _filtersProvider   = filtersProvider;
     _relationsProvider = relationsProvider;
 }