public async Task <OrderViewDto[]> Handle(OrdersViewQuery request, CancellationToken cancellationToken)
        {
            var customerEmail = _userContextManager.GetCurrentUserEmail();
            var query         = _context.Orders.AsNoTracking().Where(x => x.CustomerEmail == customerEmail);

            return(await _mapper.ProjectTo <OrderViewDto>(query).ToArrayAsync(cancellationToken));
        }
 public static IRuleBuilderOptions <T, Guid> OrderExists <T>(this IRuleBuilderInitial <T, Guid> builder, IBasketDbContext context, IUserContextManager userContextManager)
 {
     return(builder.MustAsync(async(Guid orderId, CancellationToken cancellationToken) =>
     {
         var customerEmail = userContextManager.GetCurrentUserEmail();
         var order = await context.Orders.FirstOrDefaultAsync(x => x.Id == orderId && x.CustomerEmail == customerEmail, cancellationToken);
         return order != null;
     }).WithErrorCode("OrderNotExists"));
 }
        public async Task <Guid> Handle(OrderCreateCommand request, CancellationToken cancellationToken)
        {
            var customerEmail = _userContextManager.GetCurrentUserEmail();
            var order         = new Order(customerEmail);

            _context.Orders.Add(order);
            await _context.SaveChangesAsync(cancellationToken);

            return(order.Id);
        }
예제 #4
0
        public async Task <Unit> Handle(OrderUpdateCommand request, CancellationToken cancellationToken)
        {
            var customerEmail = _userContextManager.GetCurrentUserEmail();
            var order         = await _context.Orders.FirstOrDefaultAsync(x => x.Id == request.OrderId && x.CustomerEmail == customerEmail, cancellationToken);

            order.SetStatus(request.Status);
            await _context.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }
        public async Task <Unit> Handle(OrderProductCreateCommand request, CancellationToken cancellationToken)
        {
            var customerEmail = _userContextManager.GetCurrentUserEmail();
            var order         = await _context.Orders.Include(x => x.OrderProducts).FirstOrDefaultAsync(x => x.Id == request.OrderId && x.CustomerEmail == customerEmail, cancellationToken);

            order.AddProduct(request.ProductId, request.Quantity);
            await _context.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }
예제 #6
0
        public async Task <bool> ProductInOrderAsync(OrderProductUpdateCommand command, CancellationToken cancellationToken)
        {
            var customerEmail = _userContextManager.GetCurrentUserEmail();
            var order         = await _context.Orders.Include(x => x.OrderProducts).FirstOrDefaultAsync(x => x.Id == command.OrderId && x.CustomerEmail == customerEmail, cancellationToken);

            if (order == null)
            {
                return(false);
            }
            var product = order.OrderProducts.FirstOrDefault(x => x.ProductId == command.ProductId);

            return(product != null);
        }
        public async Task <OrderViewDto> Handle(OrderViewQuery request, CancellationToken cancellationToken)
        {
            var customerEmail = _userContextManager.GetCurrentUserEmail();
            var order         = await _context.Orders.AsNoTracking().Include(x => x.OrderProducts).FirstOrDefaultAsync(x => x.Id == request.OrderId && x.CustomerEmail == customerEmail, cancellationToken);

            if (order == null)
            {
                return(null);
            }
            var products = await _productsClient.GetProductsAsync(order.OrderProducts.Select(x => x.ProductId).ToArray(), cancellationToken);

            var result = _mapper.Map <OrderViewDto>(order);

            foreach (var orderPorduct in result.OrderProducts)
            {
                orderPorduct.Product = products.FirstOrDefault(x => x.Id == orderPorduct.ProductId);
            }
            return(result);
        }