public async Task <bool> Handle(PlaceOrderCommand request, CancellationToken cancellationToken) { IEnumerable <Game> cartItems = _cartService.GetGames(request.UserCartID); var user = await _userManager.FindByIdAsync(request.UserID); var itemsOwner = await _userManager.FindByIdAsync(cartItems.First().OwnerID); var totalPrice = CalculateTotalPrice(cartItems); request.OrderModel.Placed = DateTime.UtcNow; request.OrderModel.TotalPrice = totalPrice; request.OrderModel.Email = (string.IsNullOrEmpty(request.OrderModel.AlternativeEmailAdress)) ? user.Email : request.OrderModel.AlternativeEmailAdress; request.OrderModel.PhoneNumber = (string.IsNullOrEmpty(request.OrderModel.AlternativePhoneNumber)) ? user.PhoneNumber : request.OrderModel.AlternativePhoneNumber; var result = _mapper.Map <Order>(request.OrderModel); var orderID = _dbContext.Orders.Last().ID; string gameTitles = string.Empty; foreach (var item in cartItems) { gameTitles = gameTitles.Concat(item.Title).ToString(); _dbContext.OrderItems.Add(new OrderItem { GameID = item.ID, CartID = user.CartID, OrderID = orderID }); } var message = new GamingShop.Data.Models.Message { Content = $"Ordered items: {gameTitles}", RecipientEmail = itemsOwner.Email, RecipientID = itemsOwner.Id, SenderID = user.Id, Sent = DateTime.UtcNow, Subject = $"A {user.UserName} ordered your game(s)" }; _dbContext.Messages.Add(message); await _emailSender.SendOrderDetailsEmail(request.OrderModel.Email, "Order", cartItems, new Address { Street = request.OrderModel.Street, City = request.OrderModel.City, Country = request.OrderModel.Country, PhoneNumber = request.OrderModel.PhoneNumber }, totalPrice); await _emailSender.SendEmail(message); await _cartService.ClearCart(request.UserCartID); await _orderService.MarkGameAsSold(cartItems); if (await _dbContext.SaveChangesAsync() > 0) { return(true); } return(false); }
public async Task <bool> Handle(SendMessageCommand request, CancellationToken cancellationToken) { using (_dbContext = _dbContextFactory.CreateDbContext()) { GamingShop.Data.Models.Message msg; if (request.Message.Replying == false) { var recipientID = _gameService.GetByID(request.Message.GameID).OwnerID; var recipient = await _userManager.FindByIdAsync(recipientID); var sender = await _userManager.FindByIdAsync(request.Message.SenderID); msg = new GamingShop.Data.Models.Message { Content = request.Message.Content, Read = false, RecipientEmail = recipient.Email, RecipientID = recipientID, SenderID = request.Message.SenderID, Sent = DateTime.UtcNow, Subject = request.Message.Subject, SenderEmail = sender.Email }; } else { msg = _mapper.Map <GamingShop.Data.Models.Message>(request.Message); } _dbContext.Messages.Add(msg); if (await _dbContext.SaveChangesAsync() > 0) { return(true); } return(false); } }