From 3f7f02b029f5f26b809c7fc25836e2df1b6cdaf7 Mon Sep 17 00:00:00 2001 From: Andrew Andrew Date: Mon, 21 Dec 2020 20:19:01 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B0=20BookService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BookMarket/Controllers/HomeController.cs | 21 ++++++-- BookMarket/Properties/launchSettings.json | 2 +- BookMarket/Services/Books/BookService.cs | 61 +++++++++++++++-------- BookMarket/Services/Books/IBookService.cs | 2 +- BookMarket/Views/Home/newComments.cshtml | 18 +++---- BookMarket/Views/Shared/_Layout.cshtml | 8 +-- 6 files changed, 73 insertions(+), 39 deletions(-) diff --git a/BookMarket/Controllers/HomeController.cs b/BookMarket/Controllers/HomeController.cs index c9510ec..a7ac91b 100644 --- a/BookMarket/Controllers/HomeController.cs +++ b/BookMarket/Controllers/HomeController.cs @@ -83,11 +83,24 @@ public async Task newBooks() [HttpGet] public async Task topBooks() { - var topBooks = await context.Book - .Select(i => new IndexBook { RatingBook = i.UserRating.Count != 0 ? i.UserRating.Average(i => i.Mark) : 0, IdAuthor = (int)i.IdAuthor, Id = i.Id, Name = i.Name, PosterBook = i.PosterBook, AuthorNameFamily = i.IdAuthorNavigation.NameFamily }) - .OrderByDescending(i => i.RatingBook).Take(4).ToListAsync(); - return PartialView("topBooksData", topBooks); + // Получаем айдишники топовых книг + var ids = context.Ratings + .GroupBy(u => u.IdBook) + .Select(g => new + { + g.Key, + MarkAverage = g.Average(s => s.Mark) + }) + .OrderByDescending(i => i.MarkAverage).Take(4).Select(g => g.Key).ToList(); + + var books = context.Book.Where(p => ids.Contains(p.Id)) + .Select(i => new IndexBook { RatingBook = i.UserRating.Average(i => i.Mark), IdAuthor = (int)i.IdAuthor, Id = i.Id, Name = i.Name, PosterBook = i.PosterBook, AuthorNameFamily = i.IdAuthorNavigation.NameFamily }) + .ToList(); + + + return PartialView("topBooksData", books); + } diff --git a/BookMarket/Properties/launchSettings.json b/BookMarket/Properties/launchSettings.json index 01f0c66..54db60b 100644 --- a/BookMarket/Properties/launchSettings.json +++ b/BookMarket/Properties/launchSettings.json @@ -4,7 +4,7 @@ "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:53887", - "sslPort": 44305 + "sslPort": 0 } }, "profiles": { diff --git a/BookMarket/Services/Books/BookService.cs b/BookMarket/Services/Books/BookService.cs index 882a74f..5d773e2 100644 --- a/BookMarket/Services/Books/BookService.cs +++ b/BookMarket/Services/Books/BookService.cs @@ -50,32 +50,51 @@ public async Task> GetFavoritesBooks(string userName) /// /// Количество комментариев /// Выборка последних комментариев - public async Task>> GetLastCommentaries(int CountCommentary) + public async Task > GetLastCommentaries(int CountCommentary) { - var lastComments = (await db.Book - .Where(i => i.UserRating.Count() != 0) + /* var lastComments = (await db.Book + .Where(i => i.UserRating.Count() != 0) + .Include("UserRating") + .Include("IdAuthorNavigation") + .Include("IdCategoryNavigation") + .ToDictionaryAsync(i => + new BookViewModel + { + Id = i.Id, + Name = i.Name, + AuthorNameFamily = i.IdAuthorNavigation.NameFamily, + CategoryName = i.IdCategoryNavigation.Name, + IdAuthor = (int)i.IdAuthor, + PosterBook = i.PosterBook, + RatingBook = i.UserRating.Count != 0 ? i.UserRating.Average(i => i.Mark) : 0 + }, + s => s.UserRating.OrderByDescending(i => i.Id).FirstOrDefault())) + .OrderByDescending(i => i.Value.DateCreated) + .Take(4);*/ + + + // Получаем номера книг последних комментируемых + var ids = await db.Ratings.OrderByDescending(i => i.DateCreated).Select(i => i.IdBook).Take(CountCommentary).ToListAsync(); + + var books = await db.Book .Include("UserRating") .Include("IdAuthorNavigation") .Include("IdCategoryNavigation") - .ToDictionaryAsync(i => - new BookViewModel - { - Id = i.Id, - Name = i.Name, - AuthorNameFamily = i.IdAuthorNavigation.NameFamily, - CategoryName = i.IdCategoryNavigation.Name, - IdAuthor = (int)i.IdAuthor, - PosterBook = i.PosterBook, - RatingBook = i.UserRating.Count != 0 ? i.UserRating.Average(i => i.Mark) : 0 - }, - s => s.UserRating.OrderByDescending(i => i.Id).FirstOrDefault())) - .OrderByDescending(i => i.Value.DateCreated) - .Take(4); - - - + .Where(i => ids.Contains(i.Id)) + .Select(i => + new BookViewModel + { + Id = i.Id, + Name = i.Name, + AuthorNameFamily = i.IdAuthorNavigation.NameFamily, + CategoryName = i.IdCategoryNavigation.Name, + IdAuthor = (int)i.IdAuthor, + PosterBook = i.PosterBook, + RatingBook = i.UserRating.Count != 0 ? i.UserRating.Average(i => i.Mark) : 0 + }) + .ToListAsync(); - return lastComments; + return books; } /// diff --git a/BookMarket/Services/Books/IBookService.cs b/BookMarket/Services/Books/IBookService.cs index 8323a35..8e9da35 100644 --- a/BookMarket/Services/Books/IBookService.cs +++ b/BookMarket/Services/Books/IBookService.cs @@ -27,7 +27,7 @@ public interface IBookService /// /// Количество комментариев /// Выборка последних комментариев - public Task>> GetLastCommentaries(int CountCommentary); + public Task> GetLastCommentaries(int CountCommentary); /// /// Выборка последних комментариев юзера diff --git a/BookMarket/Views/Home/newComments.cshtml b/BookMarket/Views/Home/newComments.cshtml index 9b66f5e..80e6920 100644 --- a/BookMarket/Views/Home/newComments.cshtml +++ b/BookMarket/Views/Home/newComments.cshtml @@ -1,23 +1,23 @@ -@model IEnumerable> +@model IEnumerable @foreach (var item in Model) {
- @if (item.Key.RatingBook != 0) + @if (item.RatingBook != 0) { -
Рейтинг @item.Key.RatingBook.ToString("0.00")
+
Рейтинг @item.RatingBook.ToString("0.00")
} else { @@ -25,8 +25,8 @@ }
diff --git a/BookMarket/Views/Shared/_Layout.cshtml b/BookMarket/Views/Shared/_Layout.cshtml index be5ba99..f9a87a1 100644 --- a/BookMarket/Views/Shared/_Layout.cshtml +++ b/BookMarket/Views/Shared/_Layout.cshtml @@ -3,15 +3,17 @@ - market-books - @ViewData["Title"] + Электронная бесплатная онлайн библиотека - @ViewData["Title"] + + - - + + @RenderSection("Css", required: false)