public HttpResponseMessage GetSortedLibraryBooks() { var libraryService = new LibraryService(); List<CategoryBookList> listOfCategories = new List<CategoryBookList>(); foreach (LibraryBookCategory category in Enum.GetValues(typeof(LibraryBookCategory))) { IEnumerable<ILibraryBook> books = libraryService.AllBooks(category); List<ILibraryBook> bookList = books.ToList<ILibraryBook>(); ILibraryBookFineCalculator calculator = new LibraryBookFineCalculator(); //create the object you will return to the client string categoryString = category.ToString(); CategoryBookList catBookList = new CategoryBookList(bookList, categoryString, calculator.CalculateTotalFine(DateTime.Now, bookList)); listOfCategories.Add(catBookList); } return Request.CreateResponse(HttpStatusCode.OK, listOfCategories); }
public IList <CategoryCatalogueInfoDto> AllBooksSortedByCategory() { var booksSortedByCategories = new Dictionary <LibraryBookCategory, List <ILibraryBook> >(); foreach (var book in _books) { if (!booksSortedByCategories.ContainsKey(book.Category)) { booksSortedByCategories.Add(book.Category, new List <ILibraryBook> { book }); } else { if (booksSortedByCategories.TryGetValue(book.Category, out var bookInCategory)) { bookInCategory.Add(book); } } } var fineCalculator = new LibraryBookFineCalculator(); return(booksSortedByCategories.Select(entry => { entry.Value.Sort(new ILibraryComp()); double totalFine = (double)fineCalculator.CalculateTotalFine(DateTime.Today, entry.Value) / 100; return new CategoryCatalogueInfoDto { Category = entry.Key.ToString(), Count = entry.Value.Count(), FineTotal = totalFine, Books = entry.Value }; }).ToList()); }