Esempio n. 1
0
        async public Task <IActionResult> Search(string query, int?page)
        {
            if (string.IsNullOrEmpty(query))
            {
                return(View());
            }

            // Add default pagination
            if (!page.HasValue)
            {
                page = 1;
            }

            var db      = new BookRecommenderContext();
            var books   = SearchEngine.SearchBook(db, query);
            var authors = SearchEngine.SearchAuthor(db, query);

            var searchModel = new SearchViewModel(query, page.Value, books.ToList(), authors.ToList(), db);

            // search the searched query if the user is signed in
            if (User.Identity.IsAuthenticated)
            {
                string userId = _userManager.GetUserAsync(HttpContext.User).Result.Id;
                var    user   = db.Users.Where(u => u.Id == userId)?.FirstOrDefault();
                if (user == null)
                {
                    return(View("Error"));
                }
                var ua = new UserActivity(user, ActivityType.KeywordSearched, query);
                await db.UsersActivities.AddAsync(ua);

                await db.SaveChangesAsync();
            }
            return(View(searchModel));
        }
Esempio n. 2
0
        public async Task <string> TryToGetImgUrlAsync()
        {
            var pictureUrl = OriginalImage;

            if (pictureUrl == null)
            {
                // If no picture from Open Data, then try to load first picture on google search
                // First check cache:
                pictureUrl = GoogleImageCache;
                if (string.IsNullOrEmpty(pictureUrl))
                {
                    // If nothing in cache, try to load from Google
                    var imageMiner = new DataManipulation.GoogleImageMiner();
                    pictureUrl = await imageMiner.GetFirstImageUrlAsync("book " + GetNameEn());

                    // Save to cache
                    if (pictureUrl != null)
                    {
                        GoogleImageCache = pictureUrl;
                        var db = new BookRecommenderContext();
                        db.Books.Update(this);
                        await db.SaveChangesAsync();
                    }
                }
            }
            return(pictureUrl);
        }
Esempio n. 3
0
        // GET: /Author/Detail
        /// <summary>
        /// Gets the main page for the autor
        /// </summary>
        /// <param name="id">Id of the author</param>
        /// <returns>Page with na author detail</returns>
        async public Task <IActionResult> Detail(int id)
        {
            var db          = new BookRecommenderContext();
            var author      = db.Authors.Where(a => a.AuthorId == id)?.FirstOrDefault();
            var authorBooks = author.GetBooks(db).OrderBy(b => b.GetNameEn());

            if (author == null)
            {
                return(View("Error"));
            }

            if (User.Identity.IsAuthenticated)
            {
                var userId = _userManager.GetUserAsync(HttpContext.User).Result.Id;
                var user   = db.Users.Where(u => u.Id == userId)?.FirstOrDefault();
                if (user == null)
                {
                    return(View("Error"));
                }
                var ua = new UserActivity(user, ActivityType.AuthorDetailViewed, id.ToString());
                await db.UsersActivities.AddAsync(ua);

                await db.SaveChangesAsync();
            }

            return(View(new AuthorDetail()
            {
                Author = author,
                Books = authorBooks,
            }));
        }
Esempio n. 4
0
        /// <summary>
        /// Detail of the book.
        /// </summary>
        /// <param name="id">DId of the book</param>
        /// <returns>Page with the main detail page</returns>
        async public Task <IActionResult> Detail(int id)
        {
            string userId = null;

            if (User.Identity.IsAuthenticated)
            {
                userId = (await _userManager.GetUserAsync(HttpContext.User)).Id;
            }
            var bookDetail = new BookDetail(id, userId);

            if (bookDetail.Book == null)
            {
                return(View("Error"));
            }

            if (User.Identity.IsAuthenticated)
            {
                var db   = new BookRecommenderContext();
                var user = db.Users.Where(u => u.Id == userId)?.FirstOrDefault();
                if (user == null)
                {
                    return(View("Error"));
                }
                var ua = new UserActivity(user, ActivityType.BookDetailViewed, id.ToString());
                await db.UsersActivities.AddAsync(ua);

                await db.SaveChangesAsync();
            }

            return(View(bookDetail));
        }
Esempio n. 5
0
        async public Task <IActionResult> AddRating(string bookId, string review, string scoreRating)
        {
            int bookIdParsed;
            int scoreRatingParsed;

            if (!int.TryParse(bookId, out bookIdParsed) || !int.TryParse(scoreRating, out scoreRatingParsed))
            {
                return(View("Error"));
            }

            if (!User.Identity.IsAuthenticated)
            {
                return(View("Error"));
            }
            var db     = new BookRecommenderContext();
            var userId = (await _userManager.GetUserAsync(HttpContext.User)).Id;
            var user   = db.Users.Where(u => u.Id == userId)?.FirstOrDefault();

            if (user == null)
            {
                return(View("Error"));
            }
            var book = db.Books.Where(b => b.BookId == bookIdParsed)?.FirstOrDefault();

            if (book == null)
            {
                return(View("Error"));
            }
            var rating = db.Ratings.Where(r => r.BookId == book.BookId && r.UserId == user.Id).FirstOrDefault();

            if (rating == null)
            {
                await book.AddRatingAsync(review, scoreRatingParsed, user, db);

                await db.SaveChangesAsync();
            }
            return(RedirectToAction("Detail", "Book", new { id = bookIdParsed }));
        }