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