static void Main(string[] args) { Console.OutputEncoding = Encoding.Unicode; var booveyDb = new BooveyDbContext(); //booveyDb.Database.EnsureDeleted(); //booveyDb.Database.EnsureCreated(); //string inputCountries = File.ReadAllText("../../../../Boovey.Models/Datasets/countries.json"); //string inputUsers = File.ReadAllText("../../../../Boovey.Models/Datasets/usersJsons/users.json"); //string inputUserFollowers = File.ReadAllText("../../../../Boovey.Models/Datasets/usersJsons/users-followers.json"); //string inputPublishers = File.ReadAllText("../../../../Boovey.Models/Datasets/booksJsons/publishers.json"); //string inputBooks = File.ReadAllText("../../../../Boovey.Models/Datasets/booksJsons/books.json"); //string inputBooksReviews = File.ReadAllText("../../../../Boovey.Models/Datasets/booksJsons/reviews.json"); //string inputAuthors = File.ReadAllText("../../../../Boovey.Models/Datasets/booksJsons/authors.json"); //string inputCategories = File.ReadAllText("../../../../Boovey.Models/Datasets/booksJsons/categories.json"); //Console.WriteLine(ImportCountries(booveyDb, inputCountries)); //Console.WriteLine(ImportPublishers(booveyDb, inputPublishers)); //Console.WriteLine(ImportAuthors(booveyDb, inputAuthors)); //Console.WriteLine(ImportCategories(booveyDb, inputCategories)); //Console.WriteLine(ImportBooks(booveyDb, inputBooks)); //Console.WriteLine(ImportUsers(booveyDb, inputUsers)); //Console.WriteLine(ImportUserFollowers(booveyDb, inputUserFollowers)); //Console.WriteLine(ImportBooksReviews(booveyDb, inputBooksReviews)); Console.WriteLine(GetUsers(booveyDb)); }
public static string ImportBooks(BooveyDbContext context, string inputJson) { var booksDto = JsonConvert.DeserializeObject <IEnumerable <BookImportModel> >(inputJson); var publishersIds = context.Publishers .Select(x => x.Id) .ToList(); var authorsIds = context.Authors .Select(x => x.Id) .ToList(); var categoriesIds = context.Genres .Select(x => x.Id) .ToList(); foreach (var currentBook in booksDto.Where(x => publishersIds.Contains(x.Publisher))) { var book = new Book { CoverUrl = currentBook.CoverUrl, Title = currentBook.Title, Pages = currentBook.Pages, PublicationDate = DateTime.ParseExact(currentBook.PublicationDate, "dd/MM/yyyy", CultureInfo.InvariantCulture), ASIN = currentBook.ASIN, ISBN = currentBook.ISBN, Description = currentBook.Description, PublisherId = currentBook.Publisher, }; foreach (var authorId in currentBook.AuthorsId.Where(x => authorsIds.Contains(x))) { book.Authors.Add(new AuthorBook { AuthorId = authorId }); } foreach (var categoryId in currentBook.CategoriesIds.Where(x => categoriesIds.Contains(x))) { book.BookGenres.Add(new BookGenre { CategoryId = categoryId }); } context.Books.Add(book); } context.SaveChanges(); return($"Successfully imported {context.Books.Count()} books."); }
public static string ImportCountries(BooveyDbContext context, string inputJson) { var countriesDto = JsonConvert.DeserializeObject <IEnumerable <CountryImportModel> >(inputJson); foreach (var currentCountry in countriesDto) { var country = new Country { Name = currentCountry.Name }; context.Countries.Add(country); } context.SaveChanges(); return($"Successfully imported {context.Countries.Count()} countries."); }
public static string ImportPublishers(BooveyDbContext context, string inputJson) { var publishersDto = JsonConvert.DeserializeObject <IEnumerable <PublisherImportModel> >(inputJson); foreach (var currentPubliher in publishersDto) { var publisher = new Publisher { Name = currentPubliher.Name }; context.Publishers.Add(publisher); } context.SaveChanges(); return($"Successfully imported {context.Publishers.Count()} publishers."); }
public static string ImportAuthors(BooveyDbContext context, string inputJson) { var authorsDto = JsonConvert.DeserializeObject <IEnumerable <AuthorImportModel> >(inputJson); foreach (var currentAuthor in authorsDto) { var author = new Author { FullName = currentAuthor.FullName, Summary = currentAuthor.Summary, }; context.Authors.Add(author); } context.SaveChanges(); return($"Successfully imported {context.Authors.Count()} authors."); }
public static string ImportUsers(BooveyDbContext context, string inputJson) { var countriesIds = context.Countries.Select(x => x.Id).ToList(); var usersDto = JsonConvert.DeserializeObject <IEnumerable <UserImportModel> >(inputJson).Where(x => countriesIds.Contains(x.CountryId)); var booksIds = context.Books.Select(x => x.Id).ToList(); foreach (var currentUser in usersDto) { var user = new User { FirstName = currentUser.FirstName, LastName = currentUser.LastName, Age = currentUser.Age, Email = currentUser.Email, CountryId = currentUser.CountryId }; foreach (var favoriteBook in currentUser.FavoriteBooksIds.Where(x => booksIds.Contains(x))) { var bookFavoriteByUser = new BookFavoriteByUser { BookId = favoriteBook }; user.FavoriteBooks.Add(bookFavoriteByUser); } foreach (var likedBook in currentUser.LikedBooksIds.Where(x => booksIds.Contains(x))) { var bookLikedByUser = new BookLikedByUser { BookId = likedBook }; user.LikedBooks.Add(bookLikedByUser); } context.Users.Add(user); } context.SaveChanges(); return($"Successfully imported {context.Users.Count()} users."); }
public static string ImportBooksReviews(BooveyDbContext context, string inputJson) { var booksReviewsDto = JsonConvert.DeserializeObject <IEnumerable <BookReviewImportModel> >(inputJson); var usersIds = context.Users.Select(x => x.Id).ToList(); var booksIds = context.Books.Select(x => x.Id).ToList(); var booksReviews = booksReviewsDto.Where(x => booksIds.Contains(x.BookId) && usersIds.Contains(x.UserId)) .Select(x => new Review { Rating = x.Rating, Comment = x.Comment, PublishedOn = DateTime.ParseExact(x.PublishedOn, "dd/MM/yyyy", CultureInfo.InvariantCulture), //var isValidDate = DateTime.TryParseExact(currentGame.ReleaseDate, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var releaseDate); UserId = x.UserId, BookId = x.BookId }) .ToList(); context.BooksReviews.AddRange(booksReviews); context.SaveChanges(); return($"Successfully imported {context.BooksReviews.Count()} book reviews."); }
public static string ImportUserFollowers(BooveyDbContext context, string inputJson) { var usersIds = context.Users.Select(x => x.Id).ToList(); var userFollowersDto = JsonConvert.DeserializeObject <IEnumerable <UserFollower> >(inputJson) .Where(x => usersIds.Contains(x.FollowerId) && usersIds.Contains(x.UserId)); foreach (var currentUser in userFollowersDto) { var userFollower = new UserFollower { UserId = currentUser.UserId, FollowerId = currentUser.FollowerId }; context.UsersFollowers.Add(userFollower); } context.SaveChanges(); return($"Successfully imported {context.UsersFollowers.Select(x => x.UserId).Distinct().Count()} users with {context.UsersFollowers.Select(x => x.FollowerId).Count()} followers."); }
/// <summary> /// Boovey Console Application project is only for test purposes /// The main goal is to test database relations and export some basic reports. /// The final goal of this solution is to become a big Web Application /// </summary> public static string GetUsers(BooveyDbContext context) { StringBuilder sb = new StringBuilder(); var usersIds = context.Users.Select(x => x.Id).ToList(); var followersIds = context.UsersFollowers.Select(x => x.FollowerId).ToList(); var userBooks = context.Users .Include(x => x.BooksReviews) .Select(x => new { Name = x.FirstName + " " + x.LastName, FavoriteBooks = x.FavoriteBooks.Select(x => new { Title = x.Book.Title, Authors = string.Join(", ", x.Book.Authors.Select(x => x.Author.FullName)) }).ToList(), LikedBooks = x.LikedBooks.Select(x => new { Title = x.Book.Title, Authors = string.Join(",", x.Book.Authors.Select(x => x.Author.FullName)) }).ToList(), Followers = x.Followers.Select(x => new { FullName = x.Follower.FirstName + " " + x.Follower.LastName }), // to be optimized Following = context.UsersFollowers.Where(u => u.FollowerId == x.Id) .Select(f => new { FullName = f.User.FirstName + " " + f.User.LastName }).ToList(), Reviews = x.BooksReviews.Select(r => new { BookTitle = r.Book.Title, Rating = r.Rating, Comment = r.Comment, // to be optimized BookAverageRating = (double)context.BooksReviews.Where(x => x.BookId == r.BookId).Sum(x => x.Rating) / context.BooksReviews.Where(x => x.BookId == r.BookId).Select(x => x.UserId).Count(), ReviewsCount = context.BooksReviews.Where(x => x.BookId == r.BookId).Select(x => x.UserId).Count() }).ToList() }) .OrderByDescending(x => x.FavoriteBooks.Count() + x.LikedBooks.Count()) .ToList(); foreach (var user in userBooks) { sb.AppendLine(new String('=', 90)); sb.Append($"{user.Name}"); sb.Append(new String(' ', 88 - user.Name.Length)); sb.AppendLine(new String('|', 2)); sb.AppendLine(new String('-', 90)); sb.Append($"Любими Книги :"); sb.Append(new String(' ', 88 - 14)); sb.AppendLine(new String('|', 2)); foreach (var book in user.FavoriteBooks) { sb.Append($"\"{book.Title}\" от {book.Authors}"); sb.Append(new String(' ', 82 - (book.Title.Length + book.Authors.Length))); sb.AppendLine(new String('|', 2)); } sb.AppendLine(new String('-', 90)); sb.Append($"Харесани Книги :"); sb.Append(new String(' ', 88 - 16)); sb.AppendLine(new String('|', 2)); foreach (var book in user.LikedBooks) { sb.Append($"\"{book.Title}\" от {book.Authors}"); sb.Append(new String(' ', 82 - (book.Title.Length + book.Authors.Length))); sb.AppendLine(new String('|', 2)); } sb.AppendLine(new String('-', 90)); sb.Append($"Последователи :"); sb.Append(new String(' ', 88 - 15)); sb.AppendLine(new String('|', 2)); foreach (var follower in user.Followers) { sb.Append($"{follower.FullName}"); sb.Append(new String(' ', 88 - (follower.FullName.Length))); sb.AppendLine(new String('|', 2)); } sb.AppendLine(new String('-', 90)); sb.Append($"Следва :"); sb.Append(new String(' ', 88 - 8)); sb.AppendLine(new String('|', 2)); foreach (var following in user.Following) { sb.Append($"{following.FullName}"); sb.Append(new String(' ', 88 - (following.FullName.Length))); sb.AppendLine(new String('|', 2)); } sb.AppendLine(new String('-', 90)); sb.Append($"Ревюта :"); sb.Append(new String(' ', 88 - 8)); sb.AppendLine(new String('|', 2)); foreach (var rewies in user.Reviews) { sb.Append($"Заглавие: {rewies.BookTitle}"); sb.Append(new String(' ', 78 - (rewies.BookTitle.Length))); sb.AppendLine(new String('|', 2)); sb.Append($"Оценка: {rewies.Rating:f2}"); sb.Append(new String(' ', 77 - (rewies.Rating.ToString().Length))); sb.AppendLine(new String('|', 2)); sb.Append($"Коментар: {rewies.Comment}"); sb.Append(new String(' ', 78 - (rewies.Comment.Length))); sb.AppendLine(new String('|', 2)); sb.Append($"Средна оценка: {rewies.BookAverageRating:f2}"); sb.Append(new String(' ', 73 - (rewies.BookAverageRating.ToString("f2").Length))); sb.AppendLine(new String('|', 2)); sb.Append($"Брой Ревюта на сайта : {rewies.ReviewsCount}"); sb.Append(new String(' ', 65 - (rewies.ReviewsCount.ToString().Length))); sb.AppendLine(new String('|', 2)); sb.AppendLine(new String('*', 90)); } sb.AppendLine(new String('=', 90)); } return(sb.ToString().TrimEnd()); }