Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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.");
        }
Esempio n. 3
0
        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.");
        }
Esempio n. 4
0
        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.");
        }
Esempio n. 5
0
        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.");
        }
Esempio n. 6
0
        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.");
        }
Esempio n. 7
0
        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.");
        }
Esempio n. 8
0
        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.");
        }
Esempio n. 9
0
        /// <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());
        }