public async Task <Unit> Handle(PurchaseBookCommand request, CancellationToken cancellationToken) { var foundUser = await _userRepository.FindAsync(user => user.Email == request.UserEmail, cancellationToken); if (foundUser is null) { throw new NotFoundException(nameof(User), request.UserEmail); } var bookAlreadyPurchased = await _purchasedBookrepository.FindAsync(book => book.BookId == request.BookId && book.UserId == foundUser.Id, cancellationToken); if (bookAlreadyPurchased != null) { throw new AlreadyExistException("You already purchased this book"); } var purchaseBook = new PurchasedBook { BookId = request.BookId, UserId = foundUser.Id, PaymentMode = request.PaymentMode }; await _purchasedBookrepository.CreateAsync(purchaseBook); await _purchasedBookrepository.SaveChangesAsync(cancellationToken); return(Unit.Value); }
public ActionResult Index() { PurchasedBook PurchasedBook = new PurchasedBook(); PurchasedBookViewModel PurchasedBookViewModel = new PurchasedBookViewModel(); PurchasedBookViewModel.PurchasedBookResult = PurchasedBook.GetAll(); return(View(PurchasedBookViewModel)); }
public ActionResult RemoveBook(int id) { if (ModelState.IsValid) { PurchasedBook book = db.PurchasedBooks.Single(b => b.PurchasedBookId == id); db.PurchasedBooks.Remove(book); db.SaveChanges(); return(RedirectToAction("Index")); } return(RedirectToAction("Index")); }
public ActionResult Index(PurchasedBookViewModel PurchasedBookViewModel) { if (ModelState.IsValid) { PurchasedBook PurchasedBook = new PurchasedBook(); var books = PurchasedBook.GetAll(); if (!String.IsNullOrEmpty(PurchasedBookViewModel.Keyword)) { books = books.Where(b => b.Book.Title.ToLower().Contains(PurchasedBookViewModel.Keyword.ToLower())).ToList(); } PurchasedBookViewModel.PurchasedBookResult = books; } return(View(PurchasedBookViewModel)); }
public async Task UserShouldGetHisOrders() { // Arrange var user = new User { Email = "*****@*****.**", Password = "******" }; var book = new Book { Name = "Half Girlfriend", AuthorName = "Chetan Bhagat", Cost = 900, PublishedOn = DateTime.Now.AddYears(-6), WrittenIn = "English", Description = "Lorum Ipsum is dummy data" }; var purchaseBook = new PurchasedBook { Book = book, User = user, BookId = book.Id, UserId = user.Id, PaymentMode = "Cash", }; _context.PurchasedBooks.Add(purchaseBook); _context.SaveChanges(); var count = _context.PurchasedBooks.Where(x => x.User.Email == user.Email).Select(x => x.Id).Count(); // Act var response = await _client.GetAsync($"api/user/orders?{ClaimTypes.Email}={user.Email}"); // Assert response.StatusCode.Should().Be(HttpStatusCode.OK); var stringResponse = await response.Content.ReadAsStringAsync(); var orders = JsonConvert.DeserializeObject <IEnumerable <UserOrderModel> >(stringResponse); orders.Should().HaveCount(count); // Removing Added Data _context.PurchasedBooks.Remove(purchaseBook); _context.Users.Remove(user); _context.Books.Remove(book); _context.SaveChanges(); }
public ActionResult BuyBook(int bookId, bool?confirmed) { WordlessContext db = new WordlessContext(); //check if logged in if (!(bool)Session["loginStatus"] || bookId == 0) { return(RedirectToAction("Index")); } //if logged in and a bookId is provided if (bookId != 0 && (bool)Session["loginStatus"]) { //get userId var userId = (Int64)Session["currentUserId"]; //get book Book book = (from b in db.Books where b.BookId == bookId select b).First(); //get user User user = (from u in db.Users where u.UserId == userId select u).FirstOrDefault(); //if user confirmed if (confirmed != null && user != null) { if ((bool)confirmed) { //create new book-purchase var bookToBuy = new PurchasedBook { DateOfPurchase = DateTime.Now, BookId = book.BookId, BuyerId = userId, Rating = 0 }; //add a purchase db.PurchasedBooks.Add(bookToBuy); //give author cash book.Author.Funds += book.Price; //remove cash from user user.Funds -= book.Price; //incremenet TimesPurchase by 1 book.TimesPurchased++; //save changes db.SaveChanges(); return(RedirectToAction("Index")); } } List <Book> bookToBuyView = new List <Book>() { book }; return(View(bookToBuyView)); } else { var book = (from b in db.Books.Include(c => c.Comments) where b.BookId == bookId select b).ToList(); return(View("Index", book)); } }