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