private void ConnectToBooksDatabase()
        {
            _booksDatabase = _client.GetDatabase("books_read");

            IMongoCollection <BookRead> booksRead = _booksDatabase.GetCollection <BookRead>("books");

            // this is a dummy query to get everything to date...

            var filter = Builders <BookRead> .Filter.Lte(
                new StringFieldDefinition <BookRead, BsonDateTime>("date"), new BsonDateTime(DateTime.Now));

            long totalCount = booksRead.Count(filter);

            if (totalCount == 0 && BooksRead.Count != 0)
            {
                booksRead.InsertMany(BooksRead);
                totalCount = booksRead.Count(filter);
            }
            else if (totalCount != 0 && BooksRead.Count == 0)
            {
                BooksRead.Clear();

                using (var cursor = booksRead.FindSync(filter))
                {
                    var booksList = cursor.ToList();
                    foreach (var book in booksList)
                    {
                        BooksRead.Add(book);
                    }
                }
                UpdateCollections();
                DataFromFile = false;
                DataFromDb   = true;
            }
        }
        public BooksRead UpdateBooksRead(BooksRead existing, BooksRead bookRead)
        {
            _repositoryWrapper.BooksRead.UpdateBooksRead(existing, bookRead);
            // _logger.WriteInfo($"Updated user with id: {user.Id}.");

            return(bookRead);
        }
        public BooksRead AddBooksRead(BooksRead bookRead)
        {
            _repositoryWrapper.BooksRead.AddBooksRead(bookRead);
            //_logger.WriteInfo($"Added user with id: {user.Id}.");

            return(bookRead);
        }
        public void Setup(IList <BookRead> books, IGeographyProvider geographyProvider)
        {
            _geographyProvider = geographyProvider;

            BooksRead.Clear();
            foreach (BookRead book in books.OrderBy(x => x.Date))
            {
                BooksRead.Add(book);
            }

            UpdateBookDeltas();
            UpdateBookPerYearDeltas();
            UpdateAuthors();
            UpdateWorldCountryLookup();
            int  booksReadWorldwide;
            uint pagesReadWorldwide;

            UpdateCountries(out booksReadWorldwide, out pagesReadWorldwide);
            UpdateLanguages(booksReadWorldwide, pagesReadWorldwide);
            BookLocationDeltas = new ObservableCollection <BookLocationDelta>();
            UpdateBookLocationDeltas();
            UpdateBooksPerMonth();
            UpdateBookTags();
            UpdateTalliedBooks();
            SelectedMonthTally = TalliedMonths.FirstOrDefault();
            _selectedMonth     = DateTime.Now;
            if (SelectedMonthTally != null)
            {
                _selectedMonth = SelectedMonthTally.MonthDate;
            }
        }
Beispiel #5
0
 public void RemoveBookRead(Book book)
 {
     if (BooksRead !.Any(b => b.Id == book.Id))
     {
         BooksRead.Remove(book);
         CreateOrUpdateUpdateEvent("Books");
     }
 }
Beispiel #6
0
 public void AddBookRead(Book book)
 {
     if (!(BooksRead !.Any(b => b.Id == book.Id)))
     {
         BooksRead.Add(book);
         CreateOrUpdateUpdateEvent("Books");
         var newBookReadEvent = new MemberAddedBookReadEvent(this, book);
         Events.Add(newBookReadEvent);
     }
 }
Beispiel #7
0
 public IActionResult PostReadBookAndRate([FromBody] BooksRead booksRead)
 {
     if (!ModelState.IsValid)
     {
         return(BadRequest(ModelState));
     }
     _db.Add(booksRead);
     _db.SaveChanges();
     return(CreatedAtAction("Get", new { id = booksRead.Id }, booksRead));
 }
        public void ReadBooksFromFile(string filename)
        {
            using (var sr = new StreamReader(filename, Encoding.Default))
            {
                var csv = new CsvReader(sr);

                BooksRead.Clear();

                // Date,DD/MM/YYYY,Author,Title,Pages,Note,Nationality,Original Language,Book,Comic,Audio
                while (csv.Read())
                {
                    var stringFieldDate             = csv.GetField <string>(0);
                    var stringFieldDDMMYYYY         = csv.GetField <string>(1);
                    var stringFieldAuthor           = csv.GetField <string>(2);
                    var stringFieldTitle            = csv.GetField <string>(3);
                    var stringFieldPages            = csv.GetField <string>(4);
                    var stringFieldNote             = csv.GetField <string>(5);
                    var stringFieldNationality      = csv.GetField <string>(6);
                    var stringFieldOriginalLanguage = csv.GetField <string>(7);
                    var stringFieldBook             = csv.GetField <string>(8);
                    var stringFieldComic            = csv.GetField <string>(9);
                    var stringFieldAudio            = csv.GetField <string>(10);

                    DateTime dateForBook;
                    if (DateTime.TryParseExact(stringFieldDDMMYYYY, "d/M/yyyy",
                                               CultureInfo.InvariantCulture, DateTimeStyles.None, out dateForBook))
                    {
                        UInt16 pages = 0;
                        UInt16.TryParse(stringFieldPages, out pages);
                        BookRead book = new BookRead()
                        {
                            DateString       = stringFieldDate,
                            Date             = dateForBook,
                            Author           = stringFieldAuthor,
                            Title            = stringFieldTitle,
                            Pages            = pages,
                            Note             = stringFieldNote,
                            Nationality      = stringFieldNationality,
                            OriginalLanguage = stringFieldOriginalLanguage,
                            Audio            = stringFieldAudio,
                            Book             = stringFieldBook,
                            Comic            = stringFieldComic,
                        };

                        BooksRead.Add(book);
                    }
                }
            }
            UpdateCollections();
            Properties.Settings.Default.InputFile = filename;
            Properties.Settings.Default.Save();
            DataFromFile = true;
        }
Beispiel #9
0
        // GET: WishList/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            BooksRead wishList = db.BooksReads.Find(id);

            if (wishList == null)
            {
                return(HttpNotFound());
            }
            return(View(wishList));
        }
Beispiel #10
0
        public ActionResult Create([Bind(Include = "WishListID,Name,Author,Genre, DateEntered")] DisplayWishList displayWishList)
        {
            var us   = User.Identity.Name;
            var user = db.Users.FirstOrDefault(x => x.Email == us);

            if (ModelState.IsValid)
            {
                var addBook = (from a in db.BooksReads
                               where a.BookReadName == displayWishList.Name
                               select a);


                if (addBook.Count() == 0)
                {
                    var newBook = new BooksRead();
                    newBook.BookReadName   = displayWishList.Name;
                    newBook.BookReadGenre  = displayWishList.Genre;
                    newBook.BookReadAuthor = displayWishList.Author;

                    db.BooksReads.Add(newBook);
                    db.SaveChanges();


                    var newWL = new WishList();
                    newWL.BookDateEntered = displayWishList.DateEntered;
                    newWL.BookReadID      = newBook.BookReadID;
                    newWL.Id = user.Id;


                    db.WishLists.Add(newWL);
                    db.SaveChanges();
                }
                else
                {
                    var newWL = new WishList();
                    newWL.BookDateEntered = displayWishList.DateEntered;
                    newWL.BookReadID      = addBook.First().BookReadID;
                    newWL.Id = user.Id;

                    db.WishLists.Add(newWL);
                    db.SaveChanges();
                }
                return(RedirectToAction("Index"));
            }

            return(View(displayWishList));
        }
        private void UpdateBooksPerMonth()
        {
            // clear the list and the counts
            Dictionary <DateTime, List <BookRead> > bookMonths = new Dictionary <DateTime, List <BookRead> >();

            if (BooksRead.Count < 1)
            {
                return;
            }
            DateTime startDate = BooksRead[0].Date;
            DateTime endDate   = BooksRead.Last().Date;

            endDate = new DateTime(endDate.Year, endDate.Month, endDate.Day, 23, 59, 59);

            DateTime monthStart = new DateTime(startDate.Year, startDate.Month, 1);
            DateTime monthEnd   = monthStart.AddMonths(1).AddSeconds(-1);

            // get all the months a book has been read
            while (monthStart <= endDate)
            {
                List <BookRead> monthList = new List <BookRead>();

                foreach (BookRead book in BooksRead)
                {
                    if (book.Date >= monthStart && book.Date <= monthEnd)
                    {
                        monthList.Add(book);
                    }
                }

                if (monthList.Count > 0)
                {
                    bookMonths.Add(monthStart, monthList);
                }

                monthStart = monthStart.AddMonths(1);
                monthEnd   = monthStart.AddMonths(1).AddSeconds(-1);
            }

            TalliedMonths.Clear();
            foreach (DateTime date in bookMonths.Keys.OrderBy(x => x))
            {
                TalliedMonths.Add(new TalliedMonth(date, bookMonths[date]));
            }
        }
        public ActionResult Post([FromBody] BooksReadRequest request)
        {
            var response = new BooksReadResponse();

            if (request is null)
            {
                return(BadRequest());
            }

            foreach (var bookId in request.BookIds)
            {
                var exists = _booksReadService
                             .AsQueryable()
                             .Any(x => x.BookId == bookId && x.UserId == request.UserId);

                if (exists)
                {
                    return(BadRequest("User already read that book!"));
                }

                var newBookRead = new BooksRead
                {
                    BookId = bookId,
                    UserId = (Guid)request.UserId
                };

                var item = _booksReadService.AddBooksRead(newBookRead);

                var lvl = _levelingService.AddExperience(request.UserId, Activity.ReadBook);

                if (lvl > 0)
                {
                    response.LevelupResponse = new LevelupResponse
                    {
                        NewLevel = lvl
                    };
                }

                response.BooksRead.Add(item);
            }

            response.Achievements = AwardAchievements((Guid)request.UserId);
            return(Ok(response));
        }
        public ActionResult Put([FromBody] BooksRead changedItem)
        {
            if (changedItem is null)
            {
                return(BadRequest());
            }

            var existingItem = _booksReadService.AsQueryable()
                               .Where(x => x.Id == changedItem.Id)
                               .FirstOrDefault();

            if (existingItem is null)
            {
                return(NotFound());
            }

            var item = _booksReadService.UpdateBooksRead(existingItem, changedItem);

            return(Ok(item));
        }
        public ActionResult AddReadBooks(BRViewModel brViewModel)
        {
            // Test if dropdown selector is empty and returns to Readers Book list
            if (brViewModel.Books == null)
            {
                return(RedirectToAction("ReadersBookList", new { Id = brViewModel.Readers.ReaderId.Value }));
            }
            using (var booksListContext = new BooksListContext())
            {
                var bookRead = new BooksRead
                {
                    ReaderId = brViewModel.Readers.ReaderId.Value,
                    BookId   = brViewModel.Books.BookId.Value
                };

                booksListContext.BooksRead.Add(bookRead);
                booksListContext.SaveChanges();
            }

            return(RedirectToAction("ReadersBookList", new { Id = brViewModel.Readers.ReaderId.Value }));
        }
        public bool AddNewBook(BookRead newBook, out string errorMsg)
        {
            errorMsg = "";

            // for the moment insist only that the date is after the last of the existing items
            if (BooksRead.Last().Date > newBook.Date)
            {
                errorMsg = "Date must be after last date : " + BooksRead.Last().DateString;
                return(false);
            }

            BooksRead.Add(newBook);

            if (DataFromDb)
            {
                AddNewBookToDatabase(newBook);
            }

            UpdateCollections();

            return(true);
        }
 public void RemoveBooksRead(BooksRead bookRead)
 {
     _repositoryWrapper.BooksRead.RemoveBooksRead(bookRead);
     // _logger.WriteInfo($"Removed user with id: {user.Id}.");
 }