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));
        }
Example #5
0
        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();
        }
Example #6
0
        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));
            }
        }