diff --git a/Sources/BookApp/Composants/CollectionFiltrage.xaml.cs b/Sources/BookApp/Composants/CollectionFiltrage.xaml.cs index 8f39ed4..7966e15 100644 --- a/Sources/BookApp/Composants/CollectionFiltrage.xaml.cs +++ b/Sources/BookApp/Composants/CollectionFiltrage.xaml.cs @@ -1,46 +1,46 @@ using BookApp.ViewModel; -using System.Collections.ObjectModel; - -namespace BookApp.Composants; - -public partial class CollectionFiltrage : ContentView -{ - /* public class ObjetTemp - { - public string AuteurName { get; set; } - public int NbLivre { get; set; } - - public ObjetTemp(string name, int number) - { - AuteurName = name; - NbLivre = number; - } - } - - public ObservableCollection MyCollections1 { get; set; }*/ - - public CollectionFiltrage(ViewModelManager data) - { - InitializeComponent(); - - /*MyCollections1 = new ObservableCollection() - { - new ObjetTemp("Victor Hugo", 10), - new ObjetTemp("Jane Austen", 3), - new ObjetTemp("F. Scott Fitzgerald", 5), - new ObjetTemp("George Orwell", 4), - new ObjetTemp("Haruki Murakami", 8), - new ObjetTemp("Gabriel Garc�a M�rquez", 9), - new ObjetTemp("J.K. Rowling", 9), - new ObjetTemp("Leo Tolstoy", 9), - new ObjetTemp("Ernest Hemingway", 9), - new ObjetTemp("Agatha Christie", 9), - new ObjetTemp("Mark Twain", 9), - new ObjetTemp("J.R.R. Tolkien", 9), - new ObjetTemp("William Shakespeare", 9), - new ObjetTemp("Charles Dickensn", 9), - new ObjetTemp("Isaac Asimov", 9), - };*/ - BindingContext = data; - } -} +using System.Collections.ObjectModel; + +namespace BookApp.Composants; + +public partial class CollectionFiltrage : ContentView +{ + /* public class ObjetTemp + { + public string AuteurName { get; set; } + public int NbLivre { get; set; } + + public ObjetTemp(string name, int number) + { + AuteurName = name; + NbLivre = number; + } + } + + public ObservableCollection MyCollections1 { get; set; }*/ + + public CollectionFiltrage(ViewModelManager data) + { + InitializeComponent(); + + /*MyCollections1 = new ObservableCollection() + { + new ObjetTemp("Victor Hugo", 10), + new ObjetTemp("Jane Austen", 3), + new ObjetTemp("F. Scott Fitzgerald", 5), + new ObjetTemp("George Orwell", 4), + new ObjetTemp("Haruki Murakami", 8), + new ObjetTemp("Gabriel Garc�a M�rquez", 9), + new ObjetTemp("J.K. Rowling", 9), + new ObjetTemp("Leo Tolstoy", 9), + new ObjetTemp("Ernest Hemingway", 9), + new ObjetTemp("Agatha Christie", 9), + new ObjetTemp("Mark Twain", 9), + new ObjetTemp("J.R.R. Tolkien", 9), + new ObjetTemp("William Shakespeare", 9), + new ObjetTemp("Charles Dickensn", 9), + new ObjetTemp("Isaac Asimov", 9), + };*/ + BindingContext = data; + } +} diff --git a/Sources/BookApp/MauiProgram.cs b/Sources/BookApp/MauiProgram.cs index c61dd7d..65162e4 100644 --- a/Sources/BookApp/MauiProgram.cs +++ b/Sources/BookApp/MauiProgram.cs @@ -33,7 +33,6 @@ namespace BookApp builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); - // transient pour recharger la data à l'execute diff --git a/Sources/BookApp/Pages/DetailBook.xaml.cs b/Sources/BookApp/Pages/DetailBook.xaml.cs index 6e3cbdc..666661a 100644 --- a/Sources/BookApp/Pages/DetailBook.xaml.cs +++ b/Sources/BookApp/Pages/DetailBook.xaml.cs @@ -9,30 +9,30 @@ public partial class DetailBook : ContentPage public Book BookDetail { get; set; } */ - public DetailBook()//Book ItemBook) + public DetailBook() //Book ItemBook) { InitializeComponent(); - /* for (int i = 1; i <= maxStars; i++) - { - var star = new Image - { - Source = "empty_star.svg", // image d'une étoile vide - WidthRequest = 25, - HeightRequest = 25 - }; - - int currentStar = i; - - star.GestureRecognizers.Add( - new TapGestureRecognizer { Command = new Command(() => StarTapped(currentStar)), } - ); - StarLayout.Children.Add(star); - } - - UpdateStars(); - BookDetail = ItemBook; - BindingContext = this;*/ + /* for (int i = 1; i <= maxStars; i++) + { + var star = new Image + { + Source = "empty_star.svg", // image d'une étoile vide + WidthRequest = 25, + HeightRequest = 25 + }; + + int currentStar = i; + + star.GestureRecognizers.Add( + new TapGestureRecognizer { Command = new Command(() => StarTapped(currentStar)), } + ); + StarLayout.Children.Add(star); + } + + UpdateStars(); + BookDetail = ItemBook; + BindingContext = this;*/ } /* private void StarTapped(int rating) diff --git a/Sources/BookApp/Pages/Filtrage.xaml.cs b/Sources/BookApp/Pages/Filtrage.xaml.cs index ae9a253..a4c8083 100644 --- a/Sources/BookApp/Pages/Filtrage.xaml.cs +++ b/Sources/BookApp/Pages/Filtrage.xaml.cs @@ -1,6 +1,6 @@ using BookApp.ViewModel; -using VMWrapper; - +using VMWrapper; + namespace BookApp.Pages { public partial class Filtrage : ContentPage @@ -10,7 +10,7 @@ namespace BookApp.Pages public Filtrage(BookViewModel data) { InitializeComponent(); - BindingContext= data; + BindingContext = data; } async void BackButton(object sender, EventArgs args) diff --git a/Sources/BookApp/ViewModel/ViewModelManager.cs b/Sources/BookApp/ViewModel/ViewModelManager.cs index 519e513..1096cda 100644 --- a/Sources/BookApp/ViewModel/ViewModelManager.cs +++ b/Sources/BookApp/ViewModel/ViewModelManager.cs @@ -1,24 +1,20 @@ using Model; -using System.Collections.ObjectModel; +using System.Collections.ObjectModel; using VMWrapper; using static System.Runtime.InteropServices.JavaScript.JSType; -namespace BookApp.ViewModel; - - - -public class ViewModelManager -{ - - BookViewModel _viewModel; +namespace BookApp.ViewModel; + +public class ViewModelManager +{ + BookViewModel _viewModel; public ObservableCollection Authors { get; set; } = new ObservableCollection(); /* public ObservableCollection AuteurGroups { get; private set; } = new ObservableCollection();*/ - public ViewModelManager(BookViewModel viewModel) + public ViewModelManager(BookViewModel viewModel) { - _viewModel = viewModel; //GetAuthors(); /* ObservableCollection auteurs = new Stub().CreateStubData(); @@ -26,10 +22,10 @@ public class ViewModelManager { AuteurGroups.Add(new AuteurGroup(auteur.Name, auteur.Books)); }*/ - } - - //fireandforget - /*public async void GetAuthors() + } + + //fireandforget + /*public async void GetAuthors() { var authors1 = await _viewModel.GetAuthors(); @@ -37,8 +33,8 @@ public class ViewModelManager foreach (var author in authors1) { Authors.Add(author); - } - }*/ + } + }*/ } /*public class AuteurGroup : ObservableCollection @@ -50,4 +46,4 @@ public class ViewModelManager { Name = name; } -}*/ \ No newline at end of file +}*/ diff --git a/Sources/BookApp/ViewModel/ViewModelNavigation.cs b/Sources/BookApp/ViewModel/ViewModelNavigation.cs index ade41dc..f920b45 100644 --- a/Sources/BookApp/ViewModel/ViewModelNavigation.cs +++ b/Sources/BookApp/ViewModel/ViewModelNavigation.cs @@ -6,7 +6,5 @@ using System.Threading.Tasks; namespace BookApp.ViewModel { - internal class ViewModelNavigation - { - } + internal class ViewModelNavigation { } } diff --git a/Sources/DtoAbstractLayer/IDtoManager.cs b/Sources/DtoAbstractLayer/IDtoManager.cs index 4edf2da..246bc5c 100644 --- a/Sources/DtoAbstractLayer/IDtoManager.cs +++ b/Sources/DtoAbstractLayer/IDtoManager.cs @@ -36,7 +36,12 @@ public interface IDtoManager /// /// /// max count books - Task>> GetBooksByTitle(string title, int index, int count, string sort = ""); + Task>> GetBooksByTitle( + string title, + int index, + int count, + string sort = "" + ); /// /// get books of a particular author by giving the author id @@ -53,7 +58,12 @@ public interface IDtoManager /// /// /// max count books - Task>> GetBooksByAuthorId(string authorId, int index, int count, string sort = ""); + Task>> GetBooksByAuthorId( + string authorId, + int index, + int count, + string sort = "" + ); /// /// get books of authors whose name (or alternate names) contains a particular substring @@ -70,7 +80,12 @@ public interface IDtoManager /// /// /// max count books - Task>> GetBooksByAuthor(string author, int index, int count, string sort = ""); + Task>> GetBooksByAuthor( + string author, + int index, + int count, + string sort = "" + ); /// /// get an author by specifying its id @@ -92,6 +107,10 @@ public interface IDtoManager /// /// /// max count authors - Task>> GetAuthorsByName(string substring, int index, int count, string sort = ""); + Task>> GetAuthorsByName( + string substring, + int index, + int count, + string sort = "" + ); } - diff --git a/Sources/JsonReader/AuthorJsonReader.cs b/Sources/JsonReader/AuthorJsonReader.cs index 0ae07db..ec817bb 100644 --- a/Sources/JsonReader/AuthorJsonReader.cs +++ b/Sources/JsonReader/AuthorJsonReader.cs @@ -5,15 +5,15 @@ using System.Globalization; namespace JsonReader { - public static class AuthorJsonReader - { + public static class AuthorJsonReader + { public static AuthorDTO ReadAuthor(string json) { JObject o = JObject.Parse(json); string bioTokenAsString = null; - if(o.TryGetValue("bio", out JToken? bioToken)) + if (o.TryGetValue("bio", out JToken? bioToken)) { - if(bioToken.Type == JTokenType.String) + if (bioToken.Type == JTokenType.String) { bioTokenAsString = (string)bioToken; } @@ -29,19 +29,32 @@ namespace JsonReader Id = (string)o["key"], Name = (string)o["name"], Bio = bioTokenAsString, - BirthDate = o.TryGetValue("birth_date", out JToken? bd) ? ReadDate((string)o["birth_date"]) : null, - DeathDate = o.TryGetValue("death_date", out JToken? dd) ? ReadDate((string)o["death_date"]) : null, - Links = o.TryGetValue("links", out JToken? links) ? links.Select(l => new LinkDTO { Title = (string)l["title"], Url = (string)l["url"] }).ToList() : new List(), - AlternateNames = o.TryGetValue("alternate_names", out JToken? altNames) ? altNames.Select(alt => (string)alt).ToList() : new List() + BirthDate = o.TryGetValue("birth_date", out JToken? bd) + ? ReadDate((string)o["birth_date"]) + : null, + DeathDate = o.TryGetValue("death_date", out JToken? dd) + ? ReadDate((string)o["death_date"]) + : null, + Links = o.TryGetValue("links", out JToken? links) + ? links + .Select( + l => new LinkDTO { Title = (string)l["title"], Url = (string)l["url"] } + ) + .ToList() + : new List(), + AlternateNames = o.TryGetValue("alternate_names", out JToken? altNames) + ? altNames.Select(alt => (string)alt).ToList() + : new List() }; return author; } public static DateTime? ReadDate(string dateInJson) { - if(dateInJson == null) return null; + if (dateInJson == null) + return null; - List> pubDateFormat =new List>() + List> pubDateFormat = new List>() { Tuple.Create("d MMMM yyyy", CultureInfo.GetCultureInfo("fr-FR")), Tuple.Create("d MMMM yyyy", CultureInfo.InvariantCulture), @@ -49,15 +62,23 @@ namespace JsonReader }; DateTime? publishDate = null; - foreach(var format in pubDateFormat) + foreach (var format in pubDateFormat) { - if(DateTime.TryParseExact(dateInJson, format.Item1, format.Item2, DateTimeStyles.None, out DateTime readDate)) + if ( + DateTime.TryParseExact( + dateInJson, + format.Item1, + format.Item2, + DateTimeStyles.None, + out DateTime readDate + ) + ) { publishDate = readDate; break; } } - if(!publishDate.HasValue && int.TryParse(dateInJson, out int year)) + if (!publishDate.HasValue && int.TryParse(dateInJson, out int year)) { publishDate = new DateTime(year, 12, 31); } @@ -68,13 +89,15 @@ namespace JsonReader { JObject o = JObject.Parse(json); long numFound = (long)o["numFound"]; - var authors = o["docs"].Select(doc => new AuthorDTO - { - Id = $"/authors/{(string)doc["key"]}", - Name = (string)doc["name"], - }); + var authors = o["docs"].Select( + doc => + new AuthorDTO + { + Id = $"/authors/{(string)doc["key"]}", + Name = (string)doc["name"], + } + ); return Tuple.Create(numFound, authors); } - } + } } - diff --git a/Sources/JsonReader/BookJsonReader.cs b/Sources/JsonReader/BookJsonReader.cs index ab2a87e..504b5af 100644 --- a/Sources/JsonReader/BookJsonReader.cs +++ b/Sources/JsonReader/BookJsonReader.cs @@ -1,97 +1,117 @@ using System.Globalization; -using LibraryDTO; -using Newtonsoft.Json.Linq; - -namespace JsonReader; - -public static class BookJsonReader -{ - static Dictionary languages = new Dictionary() - { - [@"/languages/fre"] = Languages.French, - [@"/languages/eng"] = Languages.English, - ["fre"] = Languages.French, - ["eng"] = Languages.English, - [""] = Languages.Unknown - }; - - public static BookDTO ReadBook(string json) - { - JObject o = JObject.Parse(json); - var l = o["languages"]?.FirstOrDefault(""); - Languages lang = l != null ? languages[(string)l["key"]] : Languages.Unknown; - //List> pubDateFormat =new List>() - //{ - // Tuple.Create("d MMMM yyyy", CultureInfo.GetCultureInfo("fr-FR")), - // Tuple.Create("MMM dd, yyyy", CultureInfo.InvariantCulture) - //}; - - //DateTime? publishDate = null; - //foreach(var format in pubDateFormat) - //{ - // if(DateTime.TryParseExact((string)o["publish_date"], format.Item1, format.Item2, DateTimeStyles.None, out DateTime readDate)) - // { - // publishDate = readDate; - // break; - // } - //} - //if(!publishDate.HasValue) - //{ - // publishDate = new DateTime((int)o["publish_date"], 12, 31); - //} - DateTime? publishDate = AuthorJsonReader.ReadDate((string)o["publish_date"]); - - BookDTO book = new BookDTO - { - Id = (string)o["key"], - Title = (string)o["title"], - Publishers = o["publishers"].Select(p => (string)p).ToList(), - PublishDate = publishDate.GetValueOrDefault(DateTime.Now), - ISBN13 = (string)o["isbn_13"][0], - NbPages = o["number_of_pages"] != null ? (int)o["number_of_pages"] : -1, - Language = lang, - Format = o.TryGetValue("physical_format", out JToken? f) ? (string)f : null, - Works = o["works"].Select(w => new WorkDTO { Id = (string)w["key"] }).ToList(), - Contributors = o.TryGetValue("contributors", out JToken? contr) ? contr.Select(c => new ContributorDTO { Name = (string)c["name"], Role = (string)c["role"] }).ToList() : new List(), - Authors = o["authors"]?.Select(a => new AuthorDTO { Id = (string)a["key"] }).ToList() - }; - if(book.Authors == null) - { - book.Authors = new List(); - } - return book; - } - - public static Tuple> GetBooksByAuthor(string json) - { - JObject o = JObject.Parse(json); - long numFound = (long)o["numFound"]; - var books = o["docs"].Select(doc => new BookDTO - { - Id = (string)(doc["seed"].First()), - Title = (string)doc["title"], - ISBN13 = (string)(doc["isbn"].First()), - Authors = doc["seed"].Where(s => ((string)s).StartsWith("/authors/")) - .Select(s => new AuthorDTO { Id = (string)s }).ToList(), - Language = languages.GetValueOrDefault((string)(doc["language"].First())) - }); - return Tuple.Create(numFound, books); - } - - public static Tuple> GetBooksByTitle(string json) - { - JObject o = JObject.Parse(json); - long numFound = (long)o["numFound"]; - var books = o["docs"].Select(doc => new BookDTO - { - Id = (string)(doc["seed"].First()), - Title = (string)doc["title"], - ISBN13 = (string)(doc["isbn"].First()), - Authors = doc["seed"].Where(s => ((string)s).StartsWith("/authors/")) - .Select(s => new AuthorDTO { Id = (string)s }).ToList(), - Language = languages.GetValueOrDefault((string)(doc["language"].First())) - }); - return Tuple.Create(numFound, books); - } -} - +using LibraryDTO; +using Newtonsoft.Json.Linq; + +namespace JsonReader; + +public static class BookJsonReader +{ + static Dictionary languages = new Dictionary() + { + [@"/languages/fre"] = Languages.French, + [@"/languages/eng"] = Languages.English, + ["fre"] = Languages.French, + ["eng"] = Languages.English, + [""] = Languages.Unknown + }; + + public static BookDTO ReadBook(string json) + { + JObject o = JObject.Parse(json); + var l = o["languages"]?.FirstOrDefault(""); + Languages lang = l != null ? languages[(string)l["key"]] : Languages.Unknown; + //List> pubDateFormat =new List>() + //{ + // Tuple.Create("d MMMM yyyy", CultureInfo.GetCultureInfo("fr-FR")), + // Tuple.Create("MMM dd, yyyy", CultureInfo.InvariantCulture) + //}; + + //DateTime? publishDate = null; + //foreach(var format in pubDateFormat) + //{ + // if(DateTime.TryParseExact((string)o["publish_date"], format.Item1, format.Item2, DateTimeStyles.None, out DateTime readDate)) + // { + // publishDate = readDate; + // break; + // } + //} + //if(!publishDate.HasValue) + //{ + // publishDate = new DateTime((int)o["publish_date"], 12, 31); + //} + DateTime? publishDate = AuthorJsonReader.ReadDate((string)o["publish_date"]); + + BookDTO book = new BookDTO + { + Id = (string)o["key"], + Title = (string)o["title"], + Publishers = o["publishers"].Select(p => (string)p).ToList(), + PublishDate = publishDate.GetValueOrDefault(DateTime.Now), + ISBN13 = (string)o["isbn_13"][0], + NbPages = o["number_of_pages"] != null ? (int)o["number_of_pages"] : -1, + Language = lang, + Format = o.TryGetValue("physical_format", out JToken? f) ? (string)f : null, + Works = o["works"].Select(w => new WorkDTO { Id = (string)w["key"] }).ToList(), + Contributors = o.TryGetValue("contributors", out JToken? contr) + ? contr + .Select( + c => + new ContributorDTO + { + Name = (string)c["name"], + Role = (string)c["role"] + } + ) + .ToList() + : new List(), + Authors = o["authors"]?.Select(a => new AuthorDTO { Id = (string)a["key"] }).ToList() + }; + if (book.Authors == null) + { + book.Authors = new List(); + } + return book; + } + + public static Tuple> GetBooksByAuthor(string json) + { + JObject o = JObject.Parse(json); + long numFound = (long)o["numFound"]; + var books = o["docs"].Select( + doc => + new BookDTO + { + Id = (string)(doc["seed"].First()), + Title = (string)doc["title"], + ISBN13 = (string)(doc["isbn"].First()), + Authors = doc["seed"] + .Where(s => ((string)s).StartsWith("/authors/")) + .Select(s => new AuthorDTO { Id = (string)s }) + .ToList(), + Language = languages.GetValueOrDefault((string)(doc["language"].First())) + } + ); + return Tuple.Create(numFound, books); + } + + public static Tuple> GetBooksByTitle(string json) + { + JObject o = JObject.Parse(json); + long numFound = (long)o["numFound"]; + var books = o["docs"].Select( + doc => + new BookDTO + { + Id = (string)(doc["seed"].First()), + Title = (string)doc["title"], + ISBN13 = (string)(doc["isbn"].First()), + Authors = doc["seed"] + .Where(s => ((string)s).StartsWith("/authors/")) + .Select(s => new AuthorDTO { Id = (string)s }) + .ToList(), + Language = languages.GetValueOrDefault((string)(doc["language"].First())) + } + ); + return Tuple.Create(numFound, books); + } +} diff --git a/Sources/JsonReader/WorkJsonReader.cs b/Sources/JsonReader/WorkJsonReader.cs index 387dbbd..94a14eb 100644 --- a/Sources/JsonReader/WorkJsonReader.cs +++ b/Sources/JsonReader/WorkJsonReader.cs @@ -5,14 +5,14 @@ using System.Globalization; namespace JsonReader { - public static class WorkJsonReader - { - public static WorkDTO ReadWork(string json, string ratingsJson) + public static class WorkJsonReader + { + public static WorkDTO ReadWork(string json, string ratingsJson) { JObject o = JObject.Parse(json); JObject r = JObject.Parse(ratingsJson); var ratingsDto = new RatingsDTO(); - if(r["summary"]["average"].Type != JTokenType.Float) + if (r["summary"]["average"].Type != JTokenType.Float) { ratingsDto.Average = -1; ratingsDto.Count = 0; @@ -24,9 +24,9 @@ namespace JsonReader } string description = null; - if(o.TryGetValue("description", out JToken? descr)) + if (o.TryGetValue("description", out JToken? descr)) { - if(descr.Type == JTokenType.String) + if (descr.Type == JTokenType.String) { description = (string)descr; } @@ -43,13 +43,18 @@ namespace JsonReader { Id = (string)o["key"], Title = (string)o["title"], - Authors = o.TryGetValue("authors", out JToken? authors) ? authors.Select(a => new AuthorDTO { Id = (string)a["author"]["key"] }).ToList() : new List(), + Authors = o.TryGetValue("authors", out JToken? authors) + ? authors + .Select(a => new AuthorDTO { Id = (string)a["author"]["key"] }) + .ToList() + : new List(), Description = description, - Subjects = o.TryGetValue("subjects", out JToken? subjects) ? subjects.Select(s => (string)s).ToList() : new List(), + Subjects = o.TryGetValue("subjects", out JToken? subjects) + ? subjects.Select(s => (string)s).ToList() + : new List(), Ratings = ratingsDto }; return work; } - } + } } - diff --git a/Sources/LibraryDTO/AuthorDTO.cs b/Sources/LibraryDTO/AuthorDTO.cs index 22376e7..6a9aa23 100644 --- a/Sources/LibraryDTO/AuthorDTO.cs +++ b/Sources/LibraryDTO/AuthorDTO.cs @@ -1,18 +1,21 @@ using System; + namespace LibraryDTO { - public class AuthorDTO - { - public string Id { get; set; } - public string Name { get; set; } - public string ImageSmall => $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-S.jpg"; - public string ImageMedium => $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-M.jpg"; - public string ImageLarge => $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-L.jpg"; - public string Bio { get; set; } - public List AlternateNames { get; set; } = new List(); - public List Links { get; set; } - public DateTime? BirthDate { get; set; } - public DateTime? DeathDate { get; set; } - } + public class AuthorDTO + { + public string Id { get; set; } + public string Name { get; set; } + public string ImageSmall => + $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-S.jpg"; + public string ImageMedium => + $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-M.jpg"; + public string ImageLarge => + $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-L.jpg"; + public string Bio { get; set; } + public List AlternateNames { get; set; } = new List(); + public List Links { get; set; } + public DateTime? BirthDate { get; set; } + public DateTime? DeathDate { get; set; } + } } - diff --git a/Sources/LibraryDTO/BookDTO.cs b/Sources/LibraryDTO/BookDTO.cs index a260ae0..b48723c 100644 --- a/Sources/LibraryDTO/BookDTO.cs +++ b/Sources/LibraryDTO/BookDTO.cs @@ -1,23 +1,23 @@ using System; + namespace LibraryDTO { - public class BookDTO - { - public string Id { get; set; } - public string Title { get; set; } - public List Publishers { get; set; } = new List(); - public DateTime PublishDate { get; set; } - public string ISBN13 { get; set; } - public List Series { get; set; } = new List(); - public int NbPages { get; set; } - public string Format { get; set; } - public Languages Language { get; set; } - public List Contributors { get; set; } - public string ImageSmall => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-S.jpg"; - public string ImageMedium => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-M.jpg"; - public string ImageLarge => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-L.jpg"; - public List Works { get; set; } = new List(); - public List Authors { get; set; } = new List(); - } + public class BookDTO + { + public string Id { get; set; } + public string Title { get; set; } + public List Publishers { get; set; } = new List(); + public DateTime PublishDate { get; set; } + public string ISBN13 { get; set; } + public List Series { get; set; } = new List(); + public int NbPages { get; set; } + public string Format { get; set; } + public Languages Language { get; set; } + public List Contributors { get; set; } + public string ImageSmall => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-S.jpg"; + public string ImageMedium => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-M.jpg"; + public string ImageLarge => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-L.jpg"; + public List Works { get; set; } = new List(); + public List Authors { get; set; } = new List(); + } } - diff --git a/Sources/LibraryDTO/ContributorDTO.cs b/Sources/LibraryDTO/ContributorDTO.cs index beab5d1..a3c4ab3 100644 --- a/Sources/LibraryDTO/ContributorDTO.cs +++ b/Sources/LibraryDTO/ContributorDTO.cs @@ -1,10 +1,10 @@ using System; + namespace LibraryDTO { - public class ContributorDTO - { - public string Name { get; set; } - public string Role { get; set; } - } + public class ContributorDTO + { + public string Name { get; set; } + public string Role { get; set; } + } } - diff --git a/Sources/LibraryDTO/Languages.cs b/Sources/LibraryDTO/Languages.cs index fcf51b5..b75d9eb 100644 --- a/Sources/LibraryDTO/Languages.cs +++ b/Sources/LibraryDTO/Languages.cs @@ -1,11 +1,11 @@ using System; + namespace LibraryDTO { - public enum Languages - { - Unknown, - French, - English - } + public enum Languages + { + Unknown, + French, + English + } } - diff --git a/Sources/LibraryDTO/LinkDTO.cs b/Sources/LibraryDTO/LinkDTO.cs index 336909c..ef98bd8 100644 --- a/Sources/LibraryDTO/LinkDTO.cs +++ b/Sources/LibraryDTO/LinkDTO.cs @@ -1,10 +1,10 @@ using System; + namespace LibraryDTO { - public class LinkDTO - { - public string Title { get; set; } - public string Url { get; set; } - } + public class LinkDTO + { + public string Title { get; set; } + public string Url { get; set; } + } } - diff --git a/Sources/LibraryDTO/RatingsDTO.cs b/Sources/LibraryDTO/RatingsDTO.cs index f15e5eb..93eb3fd 100644 --- a/Sources/LibraryDTO/RatingsDTO.cs +++ b/Sources/LibraryDTO/RatingsDTO.cs @@ -1,10 +1,10 @@ using System; + namespace LibraryDTO { - public class RatingsDTO - { - public float Average { get; set; } - public int Count { get; set; } - } + public class RatingsDTO + { + public float Average { get; set; } + public int Count { get; set; } + } } - diff --git a/Sources/LibraryDTO/WorkDTO.cs b/Sources/LibraryDTO/WorkDTO.cs index 2c41813..0022446 100644 --- a/Sources/LibraryDTO/WorkDTO.cs +++ b/Sources/LibraryDTO/WorkDTO.cs @@ -1,14 +1,14 @@ using System; + namespace LibraryDTO { - public class WorkDTO - { - public string Id { get; set; } - public string Description { get; set; } - public string Title { get; set; } - public List Subjects { get; set; } = new List(); - public List Authors { get; set; } = new List(); - public RatingsDTO Ratings { get; set; } - } + public class WorkDTO + { + public string Id { get; set; } + public string Description { get; set; } + public string Title { get; set; } + public List Subjects { get; set; } = new List(); + public List Authors { get; set; } = new List(); + public RatingsDTO Ratings { get; set; } + } } - diff --git a/Sources/Model/Author.cs b/Sources/Model/Author.cs index 9992f2f..dddd51e 100644 --- a/Sources/Model/Author.cs +++ b/Sources/Model/Author.cs @@ -1,32 +1,36 @@ using System; + namespace Model { - public class Author : IEquatable - { - public string Id { get; set; } - public string Name { get; set; } - public string ImageSmall => $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-S.jpg"; - public string ImageMedium => $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-M.jpg"; - public string ImageLarge => $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-L.jpg"; - public string Bio { get; set; } - public List AlternateNames { get; set; } = new List(); - public List Links { get; set; } - public DateTime? BirthDate { get; set; } - public DateTime? DeathDate { get; set; } + public class Author : IEquatable + { + public string Id { get; set; } + public string Name { get; set; } + public string ImageSmall => + $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-S.jpg"; + public string ImageMedium => + $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-M.jpg"; + public string ImageLarge => + $"https://covers.openlibrary.org/a/olid/{Id.Substring(Id.LastIndexOf("/"))}-L.jpg"; + public string Bio { get; set; } + public List AlternateNames { get; set; } = new List(); + public List Links { get; set; } + public DateTime? BirthDate { get; set; } + public DateTime? DeathDate { get; set; } - public bool Equals(Author? other) - => Id == other.Id; + public bool Equals(Author? other) => Id == other.Id; - public override bool Equals(object? obj) - { - if(ReferenceEquals(obj, null)) return false; - if(ReferenceEquals(this, obj)) return true; - if(GetType() != obj.GetType()) return false; - return Equals(obj as Author); - } + public override bool Equals(object? obj) + { + if (ReferenceEquals(obj, null)) + return false; + if (ReferenceEquals(this, obj)) + return true; + if (GetType() != obj.GetType()) + return false; + return Equals(obj as Author); + } - public override int GetHashCode() - => Id.GetHashCode(); - } + public override int GetHashCode() => Id.GetHashCode(); + } } - diff --git a/Sources/Model/Book.cs b/Sources/Model/Book.cs index 092b1b8..2f176bf 100644 --- a/Sources/Model/Book.cs +++ b/Sources/Model/Book.cs @@ -4,38 +4,38 @@ namespace Model; public class Book : IEquatable { - public string Id { get; set; } - public string Title { get; set; } - public List Publishers { get; set; } = new List(); - public DateTime PublishDate { get; set; } - public string ISBN13 { get; set; } - public List Series { get; set; } = new List(); - public int NbPages { get; set; } - public string Format { get; set; } - public Languages Language { get; set; } - public List Contributors { get; set; } - public string ImageSmall => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-S.jpg"; - public string ImageMedium => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-M.jpg"; - public string ImageLarge => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-L.jpg"; + public string Id { get; set; } + public string Title { get; set; } + public List Publishers { get; set; } = new List(); + public DateTime PublishDate { get; set; } + public string ISBN13 { get; set; } + public List Series { get; set; } = new List(); + public int NbPages { get; set; } + public string Format { get; set; } + public Languages Language { get; set; } + public List Contributors { get; set; } + public string ImageSmall => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-S.jpg"; + public string ImageMedium => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-M.jpg"; + public string ImageLarge => $"https://covers.openlibrary.org/b/isbn/{ISBN13}-L.jpg"; public List Works { get; set; } = new List(); - public List Authors { get; set; } = new List(); - public Status Status { get; set; } - public List UserTags { get; set; } = new List(); - public float? UserRating { get; set; } - public string UserNote { get; set; } + public List Authors { get; set; } = new List(); + public Status Status { get; set; } + public List UserTags { get; set; } = new List(); + public float? UserRating { get; set; } + public string UserNote { get; set; } - public bool Equals(Book? other) - => Id == other.Id; + public bool Equals(Book? other) => Id == other.Id; public override bool Equals(object? obj) { - if(ReferenceEquals(obj, null)) return false; - if(ReferenceEquals(this, obj)) return true; - if(GetType() != obj.GetType()) return false; + if (ReferenceEquals(obj, null)) + return false; + if (ReferenceEquals(this, obj)) + return true; + if (GetType() != obj.GetType()) + return false; return Equals(obj as Book); } - public override int GetHashCode() - => Id.GetHashCode(); + public override int GetHashCode() => Id.GetHashCode(); } - diff --git a/Sources/Model/Borrowing.cs b/Sources/Model/Borrowing.cs index 7110c3b..de5189d 100644 --- a/Sources/Model/Borrowing.cs +++ b/Sources/Model/Borrowing.cs @@ -3,27 +3,27 @@ using static System.Runtime.InteropServices.JavaScript.JSType; namespace Model { - public class Borrowing : IEquatable //emprunt - { - public string Id { get; set; } - public Book Book { get; set; } - public Contact Owner { get; set; } - public DateTime BorrowedAt { get; set; } - public DateTime? ReturnedAt { get; set; } + public class Borrowing : IEquatable //emprunt + { + public string Id { get; set; } + public Book Book { get; set; } + public Contact Owner { get; set; } + public DateTime BorrowedAt { get; set; } + public DateTime? ReturnedAt { get; set; } - public bool Equals(Borrowing? other) - => Id == other.Id; + public bool Equals(Borrowing? other) => Id == other.Id; - public override bool Equals(object? obj) - { - if(ReferenceEquals(obj, null)) return false; - if(ReferenceEquals(this, obj)) return true; - if(GetType() != obj.GetType()) return false; - return Equals(obj as Borrowing); - } + public override bool Equals(object? obj) + { + if (ReferenceEquals(obj, null)) + return false; + if (ReferenceEquals(this, obj)) + return true; + if (GetType() != obj.GetType()) + return false; + return Equals(obj as Borrowing); + } - public override int GetHashCode() - => Id.GetHashCode(); - } + public override int GetHashCode() => Id.GetHashCode(); + } } - diff --git a/Sources/Model/Contact.cs b/Sources/Model/Contact.cs index 9066aa6..a77208c 100644 --- a/Sources/Model/Contact.cs +++ b/Sources/Model/Contact.cs @@ -1,25 +1,26 @@ using System; + namespace Model { - public class Contact : IEquatable - { - public string Id { get; set; } - public string FirstName { get; set; } - public string LastName { get; set; } + public class Contact : IEquatable + { + public string Id { get; set; } + public string FirstName { get; set; } + public string LastName { get; set; } - public bool Equals(Contact? other) - => Id == other.Id; + public bool Equals(Contact? other) => Id == other.Id; - public override bool Equals(object? obj) - { - if(ReferenceEquals(obj, null)) return false; - if(ReferenceEquals(this, obj)) return true; - if(GetType() != obj.GetType()) return false; - return Equals(obj as Contact); - } + public override bool Equals(object? obj) + { + if (ReferenceEquals(obj, null)) + return false; + if (ReferenceEquals(this, obj)) + return true; + if (GetType() != obj.GetType()) + return false; + return Equals(obj as Contact); + } - public override int GetHashCode() - => Id.GetHashCode(); - } + public override int GetHashCode() => Id.GetHashCode(); + } } - diff --git a/Sources/Model/Contributor.cs b/Sources/Model/Contributor.cs index d1b5c12..4ec6a41 100644 --- a/Sources/Model/Contributor.cs +++ b/Sources/Model/Contributor.cs @@ -1,10 +1,10 @@ using System; + namespace Model { - public class Contributor - { - public string Name { get; set; } - public string Role { get; set; } - } + public class Contributor + { + public string Name { get; set; } + public string Role { get; set; } + } } - diff --git a/Sources/Model/ILibraryManager.cs b/Sources/Model/ILibraryManager.cs index 8edc427..be48f06 100644 --- a/Sources/Model/ILibraryManager.cs +++ b/Sources/Model/ILibraryManager.cs @@ -1,15 +1,35 @@ using System; + namespace Model { - public interface ILibraryManager - { + public interface ILibraryManager + { Task GetBookById(string id); Task GetBookByISBN(string isbn); - Task>> GetBooksByTitle(string title, int index, int count, string sort = ""); - Task>> GetBooksByAuthorId(string authorId, int index, int count, string sort = ""); - Task>> GetBooksByAuthor(string author, int index, int count, string sort = ""); + Task>> GetBooksByTitle( + string title, + int index, + int count, + string sort = "" + ); + Task>> GetBooksByAuthorId( + string authorId, + int index, + int count, + string sort = "" + ); + Task>> GetBooksByAuthor( + string author, + int index, + int count, + string sort = "" + ); Task GetAuthorById(string id); - Task>> GetAuthorsByName(string substring, int index, int count, string sort = ""); - } + Task>> GetAuthorsByName( + string substring, + int index, + int count, + string sort = "" + ); + } } - diff --git a/Sources/Model/IUserLibraryManager.cs b/Sources/Model/IUserLibraryManager.cs index 3e05af1..eb35fd5 100644 --- a/Sources/Model/IUserLibraryManager.cs +++ b/Sources/Model/IUserLibraryManager.cs @@ -1,40 +1,43 @@ using System; + namespace Model { - public interface IUserLibraryManager : ILibraryManager - { - Task>> GetBooksFromCollection(int index, int count, string sort = ""); - - Task AddBook(Book book); - Task AddBook(string id); - Task AddBookByIsbn(string isbn); - Task RemoveBook(Book book); - Task RemoveBook(string id); - Task RemoveBookByIsbn(string isbn); - - Task AddToFavorites(Book book); - Task AddToFavorites(string bookId); - Task RemoveFromFavorites(Book book); - Task RemoveFromFavorites(string bookId); - - Task UpdateBook(Book updatedBook); - - Task AddContact(Contact contact); - Task RemoveContact(Contact contact); - - Task LendBook(Book book, Contact contact, DateTime? loanDate); - Task GetBackBook(Book book, DateTime? returnedDate); - Task BorrowBook(Book book, Contact owner, DateTime? borrowedDate); - Task GiveBackBook(Book book, DateTime? returnedDate); + public interface IUserLibraryManager : ILibraryManager + { + Task>> GetBooksFromCollection( + int index, + int count, + string sort = "" + ); + + Task AddBook(Book book); + Task AddBook(string id); + Task AddBookByIsbn(string isbn); + Task RemoveBook(Book book); + Task RemoveBook(string id); + Task RemoveBookByIsbn(string isbn); + + Task AddToFavorites(Book book); + Task AddToFavorites(string bookId); + Task RemoveFromFavorites(Book book); + Task RemoveFromFavorites(string bookId); + + Task UpdateBook(Book updatedBook); + + Task AddContact(Contact contact); + Task RemoveContact(Contact contact); + + Task LendBook(Book book, Contact contact, DateTime? loanDate); + Task GetBackBook(Book book, DateTime? returnedDate); + Task BorrowBook(Book book, Contact owner, DateTime? borrowedDate); + Task GiveBackBook(Book book, DateTime? returnedDate); Task>> GetCurrentLoans(int index, int count); Task>> GetPastLoans(int index, int count); - Task>> GetCurrentBorrowings(int index, int count); + Task>> GetCurrentBorrowings(int index, int count); Task>> GetPastBorrowings(int index, int count); - Task>> GetContacts(int index, int count); - - } + Task>> GetContacts(int index, int count); + } } - diff --git a/Sources/Model/Languages.cs b/Sources/Model/Languages.cs index d5c2014..8a4e6ac 100644 --- a/Sources/Model/Languages.cs +++ b/Sources/Model/Languages.cs @@ -1,11 +1,11 @@ using System; + namespace Model { - public enum Languages - { - Unknown, - French, - English - } + public enum Languages + { + Unknown, + French, + English + } } - diff --git a/Sources/Model/Link.cs b/Sources/Model/Link.cs index 04afed9..2c3c35f 100644 --- a/Sources/Model/Link.cs +++ b/Sources/Model/Link.cs @@ -1,10 +1,10 @@ using System; + namespace Model { - public class Link - { - public string Title { get; set; } - public string Url { get; set; } - } + public class Link + { + public string Title { get; set; } + public string Url { get; set; } + } } - diff --git a/Sources/Model/Loan.cs b/Sources/Model/Loan.cs index f6c2168..e6c1f4e 100644 --- a/Sources/Model/Loan.cs +++ b/Sources/Model/Loan.cs @@ -1,27 +1,28 @@ using System; + namespace Model { - public class Loan : IEquatable //prêt - { - public string Id { get; set; } - public Book Book { get; set; } - public Contact Loaner { get; set; } - public DateTime LoanedAt { get; set; } - public DateTime? ReturnedAt { get; set; } + public class Loan : IEquatable //prêt + { + public string Id { get; set; } + public Book Book { get; set; } + public Contact Loaner { get; set; } + public DateTime LoanedAt { get; set; } + public DateTime? ReturnedAt { get; set; } - public bool Equals(Loan? other) - => Id == other.Id; + public bool Equals(Loan? other) => Id == other.Id; - public override bool Equals(object? obj) - { - if(ReferenceEquals(obj, null)) return false; - if(ReferenceEquals(this, obj)) return true; - if(GetType() != obj.GetType()) return false; - return Equals(obj as Loan); - } + public override bool Equals(object? obj) + { + if (ReferenceEquals(obj, null)) + return false; + if (ReferenceEquals(this, obj)) + return true; + if (GetType() != obj.GetType()) + return false; + return Equals(obj as Loan); + } - public override int GetHashCode() - => Id.GetHashCode(); - } + public override int GetHashCode() => Id.GetHashCode(); + } } - diff --git a/Sources/Model/Manager.cs b/Sources/Model/Manager.cs index 32bedf6..97b95c0 100644 --- a/Sources/Model/Manager.cs +++ b/Sources/Model/Manager.cs @@ -4,103 +4,130 @@ using System.Reflection; namespace Model { - public class Manager - { - private ILibraryManager LibraryManager { get; set; } - private IUserLibraryManager UserLibraryManager { get; set; } - - public ReadOnlyCollection Books { get; private set; } - private List books = new(); - - public Manager(ILibraryManager libMgr, IUserLibraryManager userLibMgr) - { - LibraryManager = libMgr; - UserLibraryManager = userLibMgr; - Books = new ReadOnlyCollection(books); - } - - public async Task GetBookById(string id) - => await LibraryManager.GetBookById(id); - - public async Task GetBookByISBN(string isbn) - => await LibraryManager.GetBookByISBN(isbn); - - public async Task<(long count, IEnumerable books)> GetBooksByTitle(string title, int index, int count, string sort = "") - { - var result = await LibraryManager.GetBooksByTitle(title, index, count, sort); - return (result.Item1, result.Item2); - } - - public async Task<(long count, IEnumerable books)> GetBooksByAuthorId(string authorId, int index, int count, string sort = "") - { - var result = await LibraryManager.GetBooksByAuthorId(authorId, index, count, sort); - return (result.Item1, result.Item2); - } - - public async Task<(long count, IEnumerable books)> GetBooksByAuthor(string author, int index, int count, string sort = "") - { - var result = await LibraryManager.GetBooksByAuthor(author, index, count, sort); - return (result.Item1, result.Item2); - } - - public async Task GetAuthorById(string id) - => await LibraryManager.GetAuthorById(id); - - public async Task<(long count, IEnumerable authors)> GetAuthorsByName(string substring, int index, int count, string sort = "") - { - var result = await LibraryManager.GetAuthorsByName(substring, index, count, sort); - return (result.Item1, result.Item2); - } - - public Task AddBookToCollection(string id) - { - return UserLibraryManager.AddBook(id); - } - - public async Task GetBookByIdFromCollection(string id) - => await UserLibraryManager.GetBookById(id); - - - public Task UpdateBook(Book book) - { - return UserLibraryManager.UpdateBook(book); - } - - public Task<(long count, IEnumerable books)> GetBooksFromCollection(int index, int count, string sort = "") - { - var result = UserLibraryManager.GetBooksFromCollection(index, count, sort).Result; - return Task.FromResult((result.Item1, result.Item2)); - } - - public Task<(long count, IEnumerable contacts)> GetContacts(int index, int count) - { - var result = UserLibraryManager.GetContacts(index, count).Result; - return Task.FromResult((result.Item1, result.Item2)); - } - - public Task<(long count, IEnumerable loans)> GetCurrentLoans(int index, int count) - { - var result = UserLibraryManager.GetCurrentLoans(index, count).Result; - return Task.FromResult((result.Item1, result.Item2)); - } - - public Task<(long count, IEnumerable loans)> GetPastLoans(int index, int count) - { - var result = UserLibraryManager.GetPastLoans(index, count).Result; - return Task.FromResult((result.Item1, result.Item2)); - } - - public Task<(long count, IEnumerable borrowings)> GetCurrentBorrowings(int index, int count) - { - var result = UserLibraryManager.GetCurrentBorrowings(index, count).Result; - return Task.FromResult((result.Item1, result.Item2)); - } - - public Task<(long count, IEnumerable borrowings)> GetPastBorrowings(int index, int count) - { - var result = UserLibraryManager.GetPastBorrowings(index, count).Result; - return Task.FromResult((result.Item1, result.Item2)); - } - } + public class Manager + { + private ILibraryManager LibraryManager { get; set; } + private IUserLibraryManager UserLibraryManager { get; set; } + + public ReadOnlyCollection Books { get; private set; } + private List books = new(); + + public Manager(ILibraryManager libMgr, IUserLibraryManager userLibMgr) + { + LibraryManager = libMgr; + UserLibraryManager = userLibMgr; + Books = new ReadOnlyCollection(books); + } + + public async Task GetBookById(string id) => await LibraryManager.GetBookById(id); + + public async Task GetBookByISBN(string isbn) => + await LibraryManager.GetBookByISBN(isbn); + + public async Task<(long count, IEnumerable books)> GetBooksByTitle( + string title, + int index, + int count, + string sort = "" + ) + { + var result = await LibraryManager.GetBooksByTitle(title, index, count, sort); + return (result.Item1, result.Item2); + } + + public async Task<(long count, IEnumerable books)> GetBooksByAuthorId( + string authorId, + int index, + int count, + string sort = "" + ) + { + var result = await LibraryManager.GetBooksByAuthorId(authorId, index, count, sort); + return (result.Item1, result.Item2); + } + + public async Task<(long count, IEnumerable books)> GetBooksByAuthor( + string author, + int index, + int count, + string sort = "" + ) + { + var result = await LibraryManager.GetBooksByAuthor(author, index, count, sort); + return (result.Item1, result.Item2); + } + + public async Task GetAuthorById(string id) => + await LibraryManager.GetAuthorById(id); + + public async Task<(long count, IEnumerable authors)> GetAuthorsByName( + string substring, + int index, + int count, + string sort = "" + ) + { + var result = await LibraryManager.GetAuthorsByName(substring, index, count, sort); + return (result.Item1, result.Item2); + } + + public Task AddBookToCollection(string id) + { + return UserLibraryManager.AddBook(id); + } + + public async Task GetBookByIdFromCollection(string id) => + await UserLibraryManager.GetBookById(id); + + public Task UpdateBook(Book book) + { + return UserLibraryManager.UpdateBook(book); + } + + public Task<(long count, IEnumerable books)> GetBooksFromCollection( + int index, + int count, + string sort = "" + ) + { + var result = UserLibraryManager.GetBooksFromCollection(index, count, sort).Result; + return Task.FromResult((result.Item1, result.Item2)); + } + + public Task<(long count, IEnumerable contacts)> GetContacts(int index, int count) + { + var result = UserLibraryManager.GetContacts(index, count).Result; + return Task.FromResult((result.Item1, result.Item2)); + } + + public Task<(long count, IEnumerable loans)> GetCurrentLoans(int index, int count) + { + var result = UserLibraryManager.GetCurrentLoans(index, count).Result; + return Task.FromResult((result.Item1, result.Item2)); + } + + public Task<(long count, IEnumerable loans)> GetPastLoans(int index, int count) + { + var result = UserLibraryManager.GetPastLoans(index, count).Result; + return Task.FromResult((result.Item1, result.Item2)); + } + + public Task<(long count, IEnumerable borrowings)> GetCurrentBorrowings( + int index, + int count + ) + { + var result = UserLibraryManager.GetCurrentBorrowings(index, count).Result; + return Task.FromResult((result.Item1, result.Item2)); + } + + public Task<(long count, IEnumerable borrowings)> GetPastBorrowings( + int index, + int count + ) + { + var result = UserLibraryManager.GetPastBorrowings(index, count).Result; + return Task.FromResult((result.Item1, result.Item2)); + } + } } - diff --git a/Sources/Model/Person.cs b/Sources/Model/Person.cs index 69daff8..b2e13e9 100644 --- a/Sources/Model/Person.cs +++ b/Sources/Model/Person.cs @@ -1,10 +1,10 @@ using System; + namespace Model { - public class Person - { - public string Id { get; set; } - public string Name { get; set; } - } + public class Person + { + public string Id { get; set; } + public string Name { get; set; } + } } - diff --git a/Sources/Model/Ratings.cs b/Sources/Model/Ratings.cs index 9579f4c..2d5aa2e 100644 --- a/Sources/Model/Ratings.cs +++ b/Sources/Model/Ratings.cs @@ -1,10 +1,10 @@ using System; + namespace Model { - public class Ratings - { - public float Average { get; set; } - public int Count { get; set; } - } + public class Ratings + { + public float Average { get; set; } + public int Count { get; set; } + } } - diff --git a/Sources/Model/Status.cs b/Sources/Model/Status.cs index 3ec0a44..74701f7 100644 --- a/Sources/Model/Status.cs +++ b/Sources/Model/Status.cs @@ -1,13 +1,13 @@ using System; + namespace Model { - public enum Status - { - Unknown, - Finished, - Reading, - NotRead, - ToBeRead - } + public enum Status + { + Unknown, + Finished, + Reading, + NotRead, + ToBeRead + } } - diff --git a/Sources/Model/Work.cs b/Sources/Model/Work.cs index e9705bd..97cd156 100644 --- a/Sources/Model/Work.cs +++ b/Sources/Model/Work.cs @@ -1,28 +1,29 @@ using System; + namespace Model { - public class Work : IEquatable - { - public string Id { get; set; } - public string Description { get; set; } - public string Title { get; set; } - public List Subjects { get; set; } = new List(); - public List Authors { get; set; } = new List(); - public Ratings Ratings { get; set; } + public class Work : IEquatable + { + public string Id { get; set; } + public string Description { get; set; } + public string Title { get; set; } + public List Subjects { get; set; } = new List(); + public List Authors { get; set; } = new List(); + public Ratings Ratings { get; set; } - public bool Equals(Work? other) - => Id == other.Id; + public bool Equals(Work? other) => Id == other.Id; - public override bool Equals(object? obj) - { - if(ReferenceEquals(obj, null)) return false; - if(ReferenceEquals(this, obj)) return true; - if(GetType() != obj.GetType()) return false; - return Equals(obj as Work); - } + public override bool Equals(object? obj) + { + if (ReferenceEquals(obj, null)) + return false; + if (ReferenceEquals(this, obj)) + return true; + if (GetType() != obj.GetType()) + return false; + return Equals(obj as Work); + } - public override int GetHashCode() - => Id.GetHashCode(); - } + public override int GetHashCode() => Id.GetHashCode(); + } } - diff --git a/Sources/Stub/EnumsMapper.cs b/Sources/Stub/EnumsMapper.cs index 95edef2..57e3beb 100644 --- a/Sources/Stub/EnumsMapper.cs +++ b/Sources/Stub/EnumsMapper.cs @@ -3,21 +3,22 @@ using Utils; namespace Stub { - static class EnumsMapper + static class EnumsMapper { - public static EnumsMapper BiddingsMapper { get; } - = new EnumsMapper( + public static EnumsMapper BiddingsMapper { get; } = + new EnumsMapper( Tuple.Create(Model.Languages.Unknown, LibraryDTO.Languages.Unknown), Tuple.Create(Model.Languages.French, LibraryDTO.Languages.French), Tuple.Create(Model.Languages.English, LibraryDTO.Languages.English) - ); + ); - public static TModel ToModel(this TDTO dto) where TModel : Enum - where TDTO : Enum + public static TModel ToModel(this TDTO dto) + where TModel : Enum + where TDTO : Enum { - foreach(var prop in typeof(EnumsMapper).GetProperties()) + foreach (var prop in typeof(EnumsMapper).GetProperties()) { - if(prop.PropertyType.Equals(typeof(EnumsMapper))) + if (prop.PropertyType.Equals(typeof(EnumsMapper))) { return (prop.GetValue(null) as EnumsMapper).GetModel(dto); } @@ -25,15 +26,16 @@ namespace Stub return default(TModel); } - public static Model.Languages ToModel(this LibraryDTO.Languages dto) - => ToModel(dto); + public static Model.Languages ToModel(this LibraryDTO.Languages dto) => + ToModel(dto); - public static TDTO ToDTO(this TModel model) where TModel : Enum - where TDTO : Enum + public static TDTO ToDTO(this TModel model) + where TModel : Enum + where TDTO : Enum { - foreach(var prop in typeof(EnumsMapper).GetProperties()) + foreach (var prop in typeof(EnumsMapper).GetProperties()) { - if(prop.PropertyType.Equals(typeof(EnumsMapper))) + if (prop.PropertyType.Equals(typeof(EnumsMapper))) { return (prop.GetValue(null) as EnumsMapper).GetEntity(model); } @@ -41,9 +43,7 @@ namespace Stub return default(TDTO); } - public static LibraryDTO.Languages ToDTO(this Model.Languages model) - => ToDTO(model); + public static LibraryDTO.Languages ToDTO(this Model.Languages model) => + ToDTO(model); } - } - diff --git a/Sources/Stub/Extensions.cs b/Sources/Stub/Extensions.cs index a4abb02..e3aa41d 100644 --- a/Sources/Stub/Extensions.cs +++ b/Sources/Stub/Extensions.cs @@ -5,89 +5,94 @@ using static Stub.Mapper; namespace Stub { - public static class Extensions - { - public static Ratings ToPoco(this RatingsDTO dto) - => new Ratings() { Average = dto.Average, Count = dto.Count }; - public static IEnumerable ToPocos(this IEnumerable dtos) - => dtos.Select(dto => dto.ToPoco()); + public static class Extensions + { + public static Ratings ToPoco(this RatingsDTO dto) => + new Ratings() { Average = dto.Average, Count = dto.Count }; - public static Contributor ToPoco(this ContributorDTO dto) - => new Contributor { Name = dto.Name, Role = dto.Role }; - public static IEnumerable ToPocos(this IEnumerable dtos) - => dtos.Select(dto => dto.ToPoco()); + public static IEnumerable ToPocos(this IEnumerable dtos) => + dtos.Select(dto => dto.ToPoco()); - public static Link ToPoco(this LinkDTO dto) - => new Link { Title = dto.Title, Url = dto.Url }; - public static IEnumerable ToPocos(this IEnumerable dtos) - => dtos.Select(dto => dto.ToPoco()); + public static Contributor ToPoco(this ContributorDTO dto) => + new Contributor { Name = dto.Name, Role = dto.Role }; - public static Author ToPoco(this AuthorDTO dto) - { - var result = AuthorsMapper.GetT(dto); - if(result == null) - { - result = new Author - { - AlternateNames = dto.AlternateNames, - Bio = dto.Bio, - BirthDate = dto.BirthDate, - DeathDate = dto.DeathDate, - Id = dto.Id, - Links = dto.Links.ToPocos().ToList(), - Name = dto.Name - }; - } - return result; - } - public static IEnumerable ToPocos(this IEnumerable dtos) - => dtos.Select(dto => dto.ToPoco()); + public static IEnumerable ToPocos(this IEnumerable dtos) => + dtos.Select(dto => dto.ToPoco()); - public static Work ToPoco(this WorkDTO dto) - { - var result = WorksMapper.GetT(dto); - if(result == null) - { - result = new Work - { - Authors = dto.Authors.ToPocos().ToList(), - Description = dto.Description, - Id = dto.Id, - Ratings = dto.Ratings.ToPoco(), - Subjects = dto.Subjects, - Title = dto.Title - }; - } - return result; - } - public static IEnumerable ToPocos(this IEnumerable dtos) - => dtos.Select(dto => dto.ToPoco()); + public static Link ToPoco(this LinkDTO dto) => + new Link { Title = dto.Title, Url = dto.Url }; - public static Book ToPoco(this BookDTO dto) - { - var result = BooksMapper.GetT(dto); - if(result == null) - { - result = new Book - { - Authors = dto.Authors.ToPocos().ToList(), - Contributors = dto.Contributors.ToPocos().ToList(), - Format = dto.Format, - Id = dto.Id, - ISBN13 = dto.ISBN13, - Language = dto.Language.ToModel(), - NbPages = dto.NbPages, - PublishDate = dto.PublishDate, - Publishers = dto.Publishers, - Series = dto.Series, - Title = dto.Title, - Works = dto.Works.ToPocos().ToList() - }; - } - return result; - } - public static IEnumerable ToPocos(this IEnumerable dtos) - => dtos.Select(dto => dto.ToPoco()); - } -} + public static IEnumerable ToPocos(this IEnumerable dtos) => + dtos.Select(dto => dto.ToPoco()); + + public static Author ToPoco(this AuthorDTO dto) + { + var result = AuthorsMapper.GetT(dto); + if (result == null) + { + result = new Author + { + AlternateNames = dto.AlternateNames, + Bio = dto.Bio, + BirthDate = dto.BirthDate, + DeathDate = dto.DeathDate, + Id = dto.Id, + Links = dto.Links.ToPocos().ToList(), + Name = dto.Name + }; + } + return result; + } + + public static IEnumerable ToPocos(this IEnumerable dtos) => + dtos.Select(dto => dto.ToPoco()); + + public static Work ToPoco(this WorkDTO dto) + { + var result = WorksMapper.GetT(dto); + if (result == null) + { + result = new Work + { + Authors = dto.Authors.ToPocos().ToList(), + Description = dto.Description, + Id = dto.Id, + Ratings = dto.Ratings.ToPoco(), + Subjects = dto.Subjects, + Title = dto.Title + }; + } + return result; + } + public static IEnumerable ToPocos(this IEnumerable dtos) => + dtos.Select(dto => dto.ToPoco()); + + public static Book ToPoco(this BookDTO dto) + { + var result = BooksMapper.GetT(dto); + if (result == null) + { + result = new Book + { + Authors = dto.Authors.ToPocos().ToList(), + Contributors = dto.Contributors.ToPocos().ToList(), + Format = dto.Format, + Id = dto.Id, + ISBN13 = dto.ISBN13, + Language = dto.Language.ToModel(), + NbPages = dto.NbPages, + PublishDate = dto.PublishDate, + Publishers = dto.Publishers, + Series = dto.Series, + Title = dto.Title, + Works = dto.Works.ToPocos().ToList() + }; + } + return result; + } + + public static IEnumerable ToPocos(this IEnumerable dtos) => + dtos.Select(dto => dto.ToPoco()); + } +} diff --git a/Sources/Stub/LibraryStub.cs b/Sources/Stub/LibraryStub.cs index ee8a432..10ed3d5 100644 --- a/Sources/Stub/LibraryStub.cs +++ b/Sources/Stub/LibraryStub.cs @@ -12,7 +12,12 @@ public class LibraryStub : ILibraryManager return (await StubDTO.GetAuthorById(id)).ToPoco(); } - public async Task>> GetAuthorsByName(string substring, int index, int count, string sort = "") + public async Task>> GetAuthorsByName( + string substring, + int index, + int count, + string sort = "" + ) { var result = await StubDTO.GetAuthorsByName(substring, index, count, sort); return Tuple.Create(result.Item1, result.Item2.ToPocos()); @@ -28,22 +33,36 @@ public class LibraryStub : ILibraryManager return (await StubDTO.GetBookByISBN(isbn)).ToPoco(); } - public async Task>> GetBooksByAuthor(string author, int index, int count, string sort = "") + public async Task>> GetBooksByAuthor( + string author, + int index, + int count, + string sort = "" + ) { var result = await StubDTO.GetBooksByAuthor(author, index, count, sort); return Tuple.Create(result.Item1, result.Item2.ToPocos()); } - public async Task>> GetBooksByAuthorId(string authorId, int index, int count, string sort = "") + public async Task>> GetBooksByAuthorId( + string authorId, + int index, + int count, + string sort = "" + ) { var result = await StubDTO.GetBooksByAuthor(authorId, index, count, sort); return Tuple.Create(result.Item1, result.Item2.ToPocos()); } - public async Task>> GetBooksByTitle(string title, int index, int count, string sort = "") + public async Task>> GetBooksByTitle( + string title, + int index, + int count, + string sort = "" + ) { var result = await StubDTO.GetBooksByTitle(title, index, count, sort); return Tuple.Create(result.Item1, result.Item2.ToPocos()); } } - diff --git a/Sources/Stub/Mapper.cs b/Sources/Stub/Mapper.cs index 1b2fc16..00e28cc 100644 --- a/Sources/Stub/Mapper.cs +++ b/Sources/Stub/Mapper.cs @@ -7,9 +7,10 @@ using LibraryDTO; namespace Stub { - static class Mapper + static class Mapper { - internal static Mapper AuthorsMapper { get; } = new Mapper(); + internal static Mapper AuthorsMapper { get; } = + new Mapper(); internal static Mapper WorksMapper { get; } = new Mapper(); internal static Mapper BooksMapper { get; } = new Mapper(); @@ -20,6 +21,4 @@ namespace Stub BooksMapper.Reset(); } } - } - diff --git a/Sources/Stub/UserLibraryStub.cs b/Sources/Stub/UserLibraryStub.cs index 7ea3f98..4297942 100644 --- a/Sources/Stub/UserLibraryStub.cs +++ b/Sources/Stub/UserLibraryStub.cs @@ -7,8 +7,8 @@ using System.Xml.Linq; namespace StubLib { - public class UserLibraryStub : IUserLibraryManager - { + public class UserLibraryStub : IUserLibraryManager + { public ReadOnlyCollection Favorites { get; private set; } private List favorites = new List(); @@ -26,8 +26,8 @@ namespace StubLib public ILibraryManager LibraryMgr { get; private set; } - public UserLibraryStub(ILibraryManager libraryMgr) - { + public UserLibraryStub(ILibraryManager libraryMgr) + { LibraryMgr = libraryMgr; Favorites = new ReadOnlyCollection(favorites); Books = new ReadOnlyCollection(books); @@ -35,42 +35,75 @@ namespace StubLib Loans = new ReadOnlyCollection(loans); Contacts = new ReadOnlyCollection(contacts); - contacts.AddRange(new Contact[] - { - new Contact { Id = "/contacts/01", FirstName = "Audrey", LastName = "Pouclet" }, - new Contact { Id = "/contacts/02", FirstName = "Malika", LastName = "More" }, - new Contact { Id = "/contacts/03", FirstName = "Antoine" }, - }); - books.AddRange(new Book[] - { - LibraryMgr.GetBookById("/books/OL25910297M").Result, - LibraryMgr.GetBookById("/books/OL26210208M").Result, - LibraryMgr.GetBookById("/books/OL27258011M").Result, - LibraryMgr.GetBookById("/books/OL28294024M").Result, - LibraryMgr.GetBookById("/books/OL28639494M").Result, - LibraryMgr.GetBookById("/books/OL35699439M").Result, - LibraryMgr.GetBookById("/books/OL37758347M").Result, - LibraryMgr.GetBookById("/books/OL38218739M").Result, - LibraryMgr.GetBookById("/books/OL38586212M").Result, - LibraryMgr.GetBookById("/books/OL8839071M").Result, - LibraryMgr.GetBookById("/books/OL8198056M").Result, - }); + contacts.AddRange( + new Contact[] + { + new Contact + { + Id = "/contacts/01", + FirstName = "Audrey", + LastName = "Pouclet" + }, + new Contact + { + Id = "/contacts/02", + FirstName = "Malika", + LastName = "More" + }, + new Contact { Id = "/contacts/03", FirstName = "Antoine" }, + } + ); + books.AddRange( + new Book[] + { + LibraryMgr.GetBookById("/books/OL25910297M").Result, + LibraryMgr.GetBookById("/books/OL26210208M").Result, + LibraryMgr.GetBookById("/books/OL27258011M").Result, + LibraryMgr.GetBookById("/books/OL28294024M").Result, + LibraryMgr.GetBookById("/books/OL28639494M").Result, + LibraryMgr.GetBookById("/books/OL35699439M").Result, + LibraryMgr.GetBookById("/books/OL37758347M").Result, + LibraryMgr.GetBookById("/books/OL38218739M").Result, + LibraryMgr.GetBookById("/books/OL38586212M").Result, + LibraryMgr.GetBookById("/books/OL8839071M").Result, + LibraryMgr.GetBookById("/books/OL8198056M").Result, + } + ); books[0].Status = Status.Finished; books[0].UserNote = "Super bouquin de SF !"; books[0].UserRating = 4.5f; - loans.Add(new Loan { Id = "/loans/01", Book = books[0], Loaner = contacts[0], LoanedAt = new DateTime(2022, 7, 12), ReturnedAt = new DateTime(2023, 9, 1) }); + loans.Add( + new Loan + { + Id = "/loans/01", + Book = books[0], + Loaner = contacts[0], + LoanedAt = new DateTime(2022, 7, 12), + ReturnedAt = new DateTime(2023, 9, 1) + } + ); books[1].Status = Status.ToBeRead; books[2].Status = Status.Finished; books[2].UserNote = "Des nouvelles de SF. Super auteur à découvrir !"; books[2].UserRating = 4.8f; books[3].Status = Status.Finished; books[3].UserRating = 4.0f; - loans.Add(new Loan { Id = "/loans/02", Book = books[3], Loaner = contacts[2], LoanedAt = new DateTime(2020, 12, 23), ReturnedAt = new DateTime(2021, 8, 13) } ); + loans.Add( + new Loan + { + Id = "/loans/02", + Book = books[3], + Loaner = contacts[2], + LoanedAt = new DateTime(2020, 12, 23), + ReturnedAt = new DateTime(2021, 8, 13) + } + ); books[4].Status = Status.Finished; books[4].UserNote = "Déjà moins connu que le premier, et pourtant..."; books[4].UserRating = 4.2f; books[5].Status = Status.Finished; - books[5].UserNote = "Coup de coeur. Poétique, anarchique, philosophique... + SF. Du Deleuze et du Foucault chez Damasio"; + books[5].UserNote = + "Coup de coeur. Poétique, anarchique, philosophique... + SF. Du Deleuze et du Foucault chez Damasio"; books[5].UserRating = 4.9f; books[6].Status = Status.NotRead; books[7].Status = Status.Finished; @@ -82,38 +115,50 @@ namespace StubLib books[9].Status = Status.ToBeRead; books[9].Status = Status.Reading; - borrowings.Add(new Borrowing - { - Id = "/borrowing/01", Owner = contacts[0], - Book = LibraryMgr.GetBookById("/books/OL27328194M").Result, - BorrowedAt = new DateTime(2023, 9, 7) - }); - borrowings.Add(new Borrowing - { - Id = "/borrowing/02", Owner = contacts[1], - Book = LibraryMgr.GetBookById("/books/OL27989051M").Result, - BorrowedAt = new DateTime(2022, 7, 7), - ReturnedAt = new DateTime(2023, 3, 1) - }); - borrowings.Add(new Borrowing - { - Id = "/borrowing/03", Owner = contacts[1], - Book = LibraryMgr.GetBookById("/books/OL35698073M").Result, - BorrowedAt = new DateTime(2022, 7, 7), - ReturnedAt = new DateTime(2022, 9, 1) - }); - borrowings.Add(new Borrowing - { - Id = "/borrowing/04", Owner = contacts[1], - Book = LibraryMgr.GetBookById("/books/OL35698083M").Result, - BorrowedAt = new DateTime(2022, 7, 7), - ReturnedAt = new DateTime(2023, 8, 30) - }); - } + borrowings.Add( + new Borrowing + { + Id = "/borrowing/01", + Owner = contacts[0], + Book = LibraryMgr.GetBookById("/books/OL27328194M").Result, + BorrowedAt = new DateTime(2023, 9, 7) + } + ); + borrowings.Add( + new Borrowing + { + Id = "/borrowing/02", + Owner = contacts[1], + Book = LibraryMgr.GetBookById("/books/OL27989051M").Result, + BorrowedAt = new DateTime(2022, 7, 7), + ReturnedAt = new DateTime(2023, 3, 1) + } + ); + borrowings.Add( + new Borrowing + { + Id = "/borrowing/03", + Owner = contacts[1], + Book = LibraryMgr.GetBookById("/books/OL35698073M").Result, + BorrowedAt = new DateTime(2022, 7, 7), + ReturnedAt = new DateTime(2022, 9, 1) + } + ); + borrowings.Add( + new Borrowing + { + Id = "/borrowing/04", + Owner = contacts[1], + Book = LibraryMgr.GetBookById("/books/OL35698083M").Result, + BorrowedAt = new DateTime(2022, 7, 7), + ReturnedAt = new DateTime(2023, 8, 30) + } + ); + } public Task AddBook(Book book) { - if(Books.Contains(book)) + if (Books.Contains(book)) { return Task.FromResult(null); } @@ -123,7 +168,7 @@ namespace StubLib public async Task AddBook(string id) { - if(Books.SingleOrDefault(b => b.Id == id) != null) + if (Books.SingleOrDefault(b => b.Id == id) != null) { return null; } @@ -134,7 +179,7 @@ namespace StubLib public async Task AddBookByIsbn(string isbn) { - if(Books.SingleOrDefault(b => b.ISBN13 == isbn) != null) + if (Books.SingleOrDefault(b => b.ISBN13 == isbn) != null) { return null; } @@ -160,12 +205,12 @@ namespace StubLib public Task AddToFavorites(Book book) { - if(Favorites.Contains(book)) + if (Favorites.Contains(book)) { return Task.FromResult(false); } var bookToAdd = Books.SingleOrDefault(b => b.Id == book.Id); - if(bookToAdd == null) + if (bookToAdd == null) { return Task.FromResult(false); } @@ -175,12 +220,12 @@ namespace StubLib public Task AddToFavorites(string bookId) { - if(Favorites.SingleOrDefault(b => b.Id == bookId) != null) + if (Favorites.SingleOrDefault(b => b.Id == bookId) != null) { return Task.FromResult(false); } var book = Books.SingleOrDefault(b => b.Id == bookId); - if(book == null) + if (book == null) { return Task.FromResult(false); } @@ -200,7 +245,7 @@ namespace StubLib public Task AddContact(Contact contact) { - if(Contacts.Contains(contact)) + if (Contacts.Contains(contact)) { return Task.FromResult(null); } @@ -215,12 +260,17 @@ namespace StubLib public Task LendBook(Book book, Contact contact, DateTime? loanDate = null) { - if(!Books.Contains(book)) + if (!Books.Contains(book)) return Task.FromResult(false); - if(!Contacts.Contains(contact)) + if (!Contacts.Contains(contact)) AddContact(contact); - Loan loan = new Loan { Book = book, Loaner = contact, LoanedAt = loanDate.GetValueOrDefault(DateTime.Now) }; - if(Loans.Contains(loan)) + Loan loan = new Loan + { + Book = book, + Loaner = contact, + LoanedAt = loanDate.GetValueOrDefault(DateTime.Now) + }; + if (Loans.Contains(loan)) return Task.FromResult(false); loans.Add(loan); return Task.FromResult(true); @@ -228,10 +278,10 @@ namespace StubLib public Task GetBackBook(Book book, DateTime? returnedDate = null) { - if(!Books.Contains(book)) + if (!Books.Contains(book)) return Task.FromResult(false); var loan = loans.SingleOrDefault(l => l.Book == book); - if(loan == null) + if (loan == null) return Task.FromResult(false); loan.ReturnedAt = returnedDate.GetValueOrDefault(DateTime.Now); return Task.FromResult(true); @@ -239,12 +289,17 @@ namespace StubLib public Task BorrowBook(Book book, Contact owner, DateTime? borrowedDate = null) { - if(!Books.Contains(book)) + if (!Books.Contains(book)) return Task.FromResult(false); - if(!Contacts.Contains(owner)) + if (!Contacts.Contains(owner)) AddContact(owner); - Borrowing borrow = new Borrowing { Book = book, Owner = owner, BorrowedAt = borrowedDate.GetValueOrDefault(DateTime.Now) }; - if(Borrowings.Contains(borrow)) + Borrowing borrow = new Borrowing + { + Book = book, + Owner = owner, + BorrowedAt = borrowedDate.GetValueOrDefault(DateTime.Now) + }; + if (Borrowings.Contains(borrow)) return Task.FromResult(false); borrowings.Add(borrow); return Task.FromResult(true); @@ -252,10 +307,10 @@ namespace StubLib public Task GiveBackBook(Book book, DateTime? returnedDate = null) { - if(!Books.Contains(book)) + if (!Books.Contains(book)) return Task.FromResult(false); var borrow = borrowings.SingleOrDefault(b => b.Book == book); - if(borrow == null) + if (borrow == null) return Task.FromResult(false); borrow.ReturnedAt = returnedDate.GetValueOrDefault(DateTime.Now); return Task.FromResult(true); @@ -271,20 +326,40 @@ namespace StubLib return Task.FromResult(Books.SingleOrDefault(b => b.ISBN13 == isbn)); } - public Task>> GetBooksByTitle(string title, int index, int count, string sort = "") + public Task>> GetBooksByTitle( + string title, + int index, + int count, + string sort = "" + ) { - var foundBooks = Books.Where(b => b.Title.Contains(title, StringComparison.InvariantCultureIgnoreCase)); + var foundBooks = Books.Where( + b => b.Title.Contains(title, StringComparison.InvariantCultureIgnoreCase) + ); return OrderBooks(foundBooks, index, count, sort); } - public Task>> GetBooksByAuthorId(string authorId, int index, int count, string sort = "") + public Task>> GetBooksByAuthorId( + string authorId, + int index, + int count, + string sort = "" + ) { - var foundBooks = Books.Where(b => b.Authors.Exists(a => a.Id.Contains(authorId)) - || b.Works.Exists(w => w.Authors.Exists(a => a.Id.Contains(authorId)))); + var foundBooks = Books.Where( + b => + b.Authors.Exists(a => a.Id.Contains(authorId)) + || b.Works.Exists(w => w.Authors.Exists(a => a.Id.Contains(authorId))) + ); return OrderBooks(books, index, count, sort); } - public Task>> GetBooksByAuthor(string author, int index, int count, string sort = "") + public Task>> GetBooksByAuthor( + string author, + int index, + int count, + string sort = "" + ) { var foundBooks = Books.Where(b => ContainsAuthorName(b, author)); return OrderBooks(books, index, count, sort); @@ -305,9 +380,14 @@ namespace StubLib return Task.FromResult(Authors.SingleOrDefault(a => a.Id == id)); } - private Task>> OrderAuthors(IEnumerable authors, int index, int count, string sort = "") + private Task>> OrderAuthors( + IEnumerable authors, + int index, + int count, + string sort = "" + ) { - switch(sort) + switch (sort) { case "name": authors = authors.OrderBy(a => a.Name); @@ -316,19 +396,31 @@ namespace StubLib authors = authors.OrderByDescending(a => a.Name); break; } - return Task.FromResult(Tuple.Create((long)authors.Count(), authors.Skip(index*count).Take(count))); - } - - public Task>> GetAuthorsByName(string substring, int index, int count, string sort = "") - { - var foundAuthors = Authors.Where(a => a.Name.Contains(substring, StringComparison.InvariantCultureIgnoreCase) - || a.AlternateNames.Exists(alt => alt.Contains(substring, StringComparison.InvariantCultureIgnoreCase))); + return Task.FromResult( + Tuple.Create((long)authors.Count(), authors.Skip(index * count).Take(count)) + ); + } + + public Task>> GetAuthorsByName( + string substring, + int index, + int count, + string sort = "" + ) + { + var foundAuthors = Authors.Where( + a => + a.Name.Contains(substring, StringComparison.InvariantCultureIgnoreCase) + || a.AlternateNames.Exists( + alt => alt.Contains(substring, StringComparison.InvariantCultureIgnoreCase) + ) + ); return OrderAuthors(foundAuthors, index, count, sort); } public Task UpdateBook(Book updatedBook) { - if(!books.Contains(updatedBook)) + if (!books.Contains(updatedBook)) { return Task.FromResult(null); } @@ -337,9 +429,14 @@ namespace StubLib return Task.FromResult(updatedBook); } - private Task>> OrderBooks(IEnumerable books, int index, int count, string sort = "") + private Task>> OrderBooks( + IEnumerable books, + int index, + int count, + string sort = "" + ) { - switch(sort) + switch (sort) { case "title": books = books.OrderBy(b => b.Title); @@ -353,29 +450,34 @@ namespace StubLib case "old": books = books.OrderBy(b => b.PublishDate); break; - } - return Task.FromResult(Tuple.Create(books.LongCount(), books.Skip(index*count).Take(count))); + return Task.FromResult( + Tuple.Create(books.LongCount(), books.Skip(index * count).Take(count)) + ); } private bool ContainsAuthorName(Book book, string name) { IEnumerable authors = new List(); - if(book.Authors != null && book.Authors.Count > 0) + if (book.Authors != null && book.Authors.Count > 0) { authors = authors.Union(book.Authors); } - if(book.Works != null) + if (book.Works != null) { var worksAuthors = book.Works.SelectMany(w => w.Authors).ToList(); - if(worksAuthors.Count > 0) + if (worksAuthors.Count > 0) authors = authors.Union(worksAuthors); } - foreach(var author in authors) + foreach (var author in authors) { - if(author.Name.Contains(name, StringComparison.OrdinalIgnoreCase) - || author.AlternateNames.Exists(alt => alt.Contains(name, StringComparison.OrdinalIgnoreCase))) + if ( + author.Name.Contains(name, StringComparison.OrdinalIgnoreCase) + || author.AlternateNames.Exists( + alt => alt.Contains(name, StringComparison.OrdinalIgnoreCase) + ) + ) { return true; } @@ -383,7 +485,11 @@ namespace StubLib return false; } - public Task>> GetBooksFromCollection(int index, int count, string sort = "") + public Task>> GetBooksFromCollection( + int index, + int count, + string sort = "" + ) { return OrderBooks(Books, index, count, sort); } @@ -391,31 +497,46 @@ namespace StubLib public Task>> GetCurrentLoans(int index, int count) { var currentLoans = Loans.Where(l => !l.ReturnedAt.HasValue); - return Task.FromResult(Tuple.Create(currentLoans.LongCount(), currentLoans.Skip(index*count).Take(count))); + return Task.FromResult( + Tuple.Create(currentLoans.LongCount(), currentLoans.Skip(index * count).Take(count)) + ); } public Task>> GetPastLoans(int index, int count) { var currentLoans = Loans.Where(l => l.ReturnedAt.HasValue); - return Task.FromResult(Tuple.Create(currentLoans.LongCount(), currentLoans.Skip(index*count).Take(count))); + return Task.FromResult( + Tuple.Create(currentLoans.LongCount(), currentLoans.Skip(index * count).Take(count)) + ); } public Task>> GetCurrentBorrowings(int index, int count) { var currentBorrowings = Borrowings.Where(l => !l.ReturnedAt.HasValue); - return Task.FromResult(Tuple.Create(currentBorrowings.LongCount(), currentBorrowings.Skip(index*count).Take(count))); + return Task.FromResult( + Tuple.Create( + currentBorrowings.LongCount(), + currentBorrowings.Skip(index * count).Take(count) + ) + ); } public Task>> GetPastBorrowings(int index, int count) { var currentBorrowings = Borrowings.Where(l => l.ReturnedAt.HasValue); - return Task.FromResult(Tuple.Create(currentBorrowings.LongCount(), currentBorrowings.Skip(index*count).Take(count))); + return Task.FromResult( + Tuple.Create( + currentBorrowings.LongCount(), + currentBorrowings.Skip(index * count).Take(count) + ) + ); } public Task>> GetContacts(int index, int count) { - return Task.FromResult(Tuple.Create(Contacts.LongCount(), Contacts.Skip(index*count).Take(count))); + return Task.FromResult( + Tuple.Create(Contacts.LongCount(), Contacts.Skip(index * count).Take(count)) + ); } } } - diff --git a/Sources/StubbedDTO/Stub.cs b/Sources/StubbedDTO/Stub.cs index e8fc5b8..0c422f4 100644 --- a/Sources/StubbedDTO/Stub.cs +++ b/Sources/StubbedDTO/Stub.cs @@ -1,208 +1,270 @@ using System.Data.SqlTypes; -using System.Reflection; +using System.Reflection; using DtoAbstractLayer; -using JsonReader; -using LibraryDTO; -using static System.Reflection.Metadata.BlobBuilder; - -namespace StubbedDTO; - -public class Stub : IDtoManager -{ - public static List Authors { get; set; } = new List(); - - public static List Books { get; set; } = new List(); - - public static List Works { get; set; } = new List(); - - public static Assembly Assembly => typeof(Stub).Assembly; - - static Stub() - { - foreach(var resource in Assembly.GetManifestResourceNames().Where(n => n.Contains("authors"))) - { - using(Stream stream = Assembly.GetManifestResourceStream(resource)) - using(StreamReader reader = new StreamReader(stream)) - { - Authors.Add(AuthorJsonReader.ReadAuthor(reader.ReadToEnd())); - } - } - - foreach(var resource in Assembly.GetManifestResourceNames().Where(n => n.Contains("works"))) - { - var ratingsResource = resource.Insert(resource.LastIndexOf('.'), ".ratings").Replace("works", "ratings"); - - using(Stream stream = Assembly.GetManifestResourceStream(resource)) - using(StreamReader reader = new StreamReader(stream)) - using(Stream streamRatings = Assembly.GetManifestResourceStream(ratingsResource)) - using(StreamReader readerRatings = new StreamReader(streamRatings)) - { - var work = WorkJsonReader.ReadWork(reader.ReadToEnd(), readerRatings.ReadToEnd()); - if(work.Authors != null) - foreach(var author in work.Authors.ToList()) - { - var newAuthor = Authors.SingleOrDefault(a => a.Id == author.Id); - work.Authors.Remove(author); - work.Authors.Add(newAuthor); - } - Works.Add(work); - } - } - - foreach(var resource in Assembly.GetManifestResourceNames().Where(n => n.Contains("books"))) - { - using(Stream stream = Assembly.GetManifestResourceStream(resource)) - using(StreamReader reader = new StreamReader(stream)) - { - var book = BookJsonReader.ReadBook(reader.ReadToEnd()); - foreach(var author in book.Authors.ToList()) - { - var newAuthor = Authors.SingleOrDefault(a => a.Id == author.Id); - book.Authors.Remove(author); - book.Authors.Add(newAuthor); - } - foreach(var work in book.Works.ToList()) - { - var newWork = Works.SingleOrDefault(w => w.Id == work.Id); - book.Works.Remove(work); - book.Works.Add(newWork); - } - Books.Add(book); - } - } - } - - public Task GetAuthorById(string id) - { - var author = Stub.Authors.SingleOrDefault(a => a.Id.Contains(id)); - return Task.FromResult(author); - } - - private Task>> OrderAuthors(IEnumerable authors, int index, int count, string sort = "") - { - switch(sort) - { - case "name": - authors = authors.OrderBy(a => a.Name); - break; - case "name_reverse": - authors = authors.OrderByDescending(a => a.Name); - break; - } - return Task.FromResult(Tuple.Create((long)authors.Count(), authors.Skip(index*count).Take(count))); - } - - public async Task>> GetAuthors(int index, int count, string sort = "") - { - IEnumerable authors = Stub.Authors; - return await OrderAuthors(authors, index, count, sort); - } - - public async Task>> GetAuthorsByName(string name, int index, int count, string sort = "") - { - var authors = Stub.Authors.Where(a => a.Name.Contains(name, StringComparison.OrdinalIgnoreCase) - || a.AlternateNames.Exists(alt => alt.Contains(name, StringComparison.OrdinalIgnoreCase))); - return await OrderAuthors(authors, index, count, sort); - } - - public Task GetBookById(string id) - { - var book = Stub.Books.SingleOrDefault(b => b.Id.Contains(id)); - return Task.FromResult(book); - } - - private Task>> OrderBooks(IEnumerable books, int index, int count, string sort = "") - { - switch(sort) - { - case "title": - books = books.OrderBy(b => b.Title); - break; - case "title_reverse": - books = books.OrderByDescending(b => b.Title); - break; - case "new": - books = books.OrderByDescending(b => b.PublishDate); - break; - case "old": - books = books.OrderBy(b => b.PublishDate); - break; - - } - return Task.FromResult(Tuple.Create(books.LongCount(), books.Skip(index*count).Take(count))); - } - - public async Task>> GetBooks(int index, int count, string sort = "") - { - var books = Stub.Books; - return await OrderBooks(books, index, count, sort); - } - - public Task GetBookByISBN(string isbn) - { - var book = Stub.Books.SingleOrDefault(b => b.ISBN13.Equals(isbn, StringComparison.OrdinalIgnoreCase)); - return Task.FromResult(book); - } - - public async Task>> GetBooksByTitle(string title, int index, int count, string sort = "") - { - var books = Stub.Books.Where(b => b.Title.Contains(title, StringComparison.OrdinalIgnoreCase) - || b.Series.Exists(s => s.Contains(title, StringComparison.OrdinalIgnoreCase))); - return await OrderBooks(books, index, count, sort); - } - - public async Task>> GetBooksByAuthorId(string authorId, int index, int count, string sort = "") - { - var books = Stub.Books.Where(b => b.Authors.Exists(a => a.Id.Contains(authorId)) - || b.Works.Exists(w => w.Authors.Exists(a => a.Id.Contains(authorId)))); - return await OrderBooks(books, index, count, sort); - } - - public async Task>> GetBooksByAuthor(string name, int index, int count, string sort = "") - { - var books = Stub.Books.Where(b => ContainsAuthorName(b, name)); - return await OrderBooks(books, index, count, sort); - } - - private bool ContainsAuthorName(BookDTO book, string name) - { - IEnumerable authors = new List(); - - if(book.Authors != null && book.Authors.Count > 0) - { - authors = authors.Union(book.Authors); - } - if(book.Works != null) - { - var worksAuthors = book.Works.SelectMany(w => w.Authors).ToList(); - if(worksAuthors.Count > 0) - authors = authors.Union(worksAuthors); - } - foreach(var author in authors) - { - if(author.Name.Contains(name, StringComparison.OrdinalIgnoreCase) - || author.AlternateNames.Exists(alt => alt.Contains(name, StringComparison.OrdinalIgnoreCase))) - { - return true; - } - } - return false; - } - - public Task>> GetWorks(int index, int count) - { - long nbWorks = Stub.Works.Count; - var works = Stub.Works.Skip(index*count).Take(count); - return Task.FromResult(Tuple.Create(nbWorks, works)); - } - - public Task GetNbAuthors() - => Task.FromResult((long)Stub.Authors.Count); - - public Task GetNbBooks() - => Task.FromResult((long)Stub.Books.Count); - - public Task GetNbWorks() - => Task.FromResult((long)Stub.Works.Count); -} - +using JsonReader; +using LibraryDTO; +using static System.Reflection.Metadata.BlobBuilder; + +namespace StubbedDTO; + +public class Stub : IDtoManager +{ + public static List Authors { get; set; } = new List(); + + public static List Books { get; set; } = new List(); + + public static List Works { get; set; } = new List(); + + public static Assembly Assembly => typeof(Stub).Assembly; + + static Stub() + { + foreach ( + var resource in Assembly.GetManifestResourceNames().Where(n => n.Contains("authors")) + ) + { + using (Stream stream = Assembly.GetManifestResourceStream(resource)) + using (StreamReader reader = new StreamReader(stream)) + { + Authors.Add(AuthorJsonReader.ReadAuthor(reader.ReadToEnd())); + } + } + + foreach ( + var resource in Assembly.GetManifestResourceNames().Where(n => n.Contains("works")) + ) + { + var ratingsResource = resource + .Insert(resource.LastIndexOf('.'), ".ratings") + .Replace("works", "ratings"); + + using (Stream stream = Assembly.GetManifestResourceStream(resource)) + using (StreamReader reader = new StreamReader(stream)) + using (Stream streamRatings = Assembly.GetManifestResourceStream(ratingsResource)) + using (StreamReader readerRatings = new StreamReader(streamRatings)) + { + var work = WorkJsonReader.ReadWork(reader.ReadToEnd(), readerRatings.ReadToEnd()); + if (work.Authors != null) + foreach (var author in work.Authors.ToList()) + { + var newAuthor = Authors.SingleOrDefault(a => a.Id == author.Id); + work.Authors.Remove(author); + work.Authors.Add(newAuthor); + } + Works.Add(work); + } + } + + foreach ( + var resource in Assembly.GetManifestResourceNames().Where(n => n.Contains("books")) + ) + { + using (Stream stream = Assembly.GetManifestResourceStream(resource)) + using (StreamReader reader = new StreamReader(stream)) + { + var book = BookJsonReader.ReadBook(reader.ReadToEnd()); + foreach (var author in book.Authors.ToList()) + { + var newAuthor = Authors.SingleOrDefault(a => a.Id == author.Id); + book.Authors.Remove(author); + book.Authors.Add(newAuthor); + } + foreach (var work in book.Works.ToList()) + { + var newWork = Works.SingleOrDefault(w => w.Id == work.Id); + book.Works.Remove(work); + book.Works.Add(newWork); + } + Books.Add(book); + } + } + } + + public Task GetAuthorById(string id) + { + var author = Stub.Authors.SingleOrDefault(a => a.Id.Contains(id)); + return Task.FromResult(author); + } + + private Task>> OrderAuthors( + IEnumerable authors, + int index, + int count, + string sort = "" + ) + { + switch (sort) + { + case "name": + authors = authors.OrderBy(a => a.Name); + break; + case "name_reverse": + authors = authors.OrderByDescending(a => a.Name); + break; + } + return Task.FromResult( + Tuple.Create((long)authors.Count(), authors.Skip(index * count).Take(count)) + ); + } + + public async Task>> GetAuthors( + int index, + int count, + string sort = "" + ) + { + IEnumerable authors = Stub.Authors; + return await OrderAuthors(authors, index, count, sort); + } + + public async Task>> GetAuthorsByName( + string name, + int index, + int count, + string sort = "" + ) + { + var authors = Stub.Authors.Where( + a => + a.Name.Contains(name, StringComparison.OrdinalIgnoreCase) + || a.AlternateNames.Exists( + alt => alt.Contains(name, StringComparison.OrdinalIgnoreCase) + ) + ); + return await OrderAuthors(authors, index, count, sort); + } + + public Task GetBookById(string id) + { + var book = Stub.Books.SingleOrDefault(b => b.Id.Contains(id)); + return Task.FromResult(book); + } + + private Task>> OrderBooks( + IEnumerable books, + int index, + int count, + string sort = "" + ) + { + switch (sort) + { + case "title": + books = books.OrderBy(b => b.Title); + break; + case "title_reverse": + books = books.OrderByDescending(b => b.Title); + break; + case "new": + books = books.OrderByDescending(b => b.PublishDate); + break; + case "old": + books = books.OrderBy(b => b.PublishDate); + break; + } + return Task.FromResult( + Tuple.Create(books.LongCount(), books.Skip(index * count).Take(count)) + ); + } + + public async Task>> GetBooks( + int index, + int count, + string sort = "" + ) + { + var books = Stub.Books; + return await OrderBooks(books, index, count, sort); + } + + public Task GetBookByISBN(string isbn) + { + var book = Stub.Books.SingleOrDefault( + b => b.ISBN13.Equals(isbn, StringComparison.OrdinalIgnoreCase) + ); + return Task.FromResult(book); + } + + public async Task>> GetBooksByTitle( + string title, + int index, + int count, + string sort = "" + ) + { + var books = Stub.Books.Where( + b => + b.Title.Contains(title, StringComparison.OrdinalIgnoreCase) + || b.Series.Exists(s => s.Contains(title, StringComparison.OrdinalIgnoreCase)) + ); + return await OrderBooks(books, index, count, sort); + } + + public async Task>> GetBooksByAuthorId( + string authorId, + int index, + int count, + string sort = "" + ) + { + var books = Stub.Books.Where( + b => + b.Authors.Exists(a => a.Id.Contains(authorId)) + || b.Works.Exists(w => w.Authors.Exists(a => a.Id.Contains(authorId))) + ); + return await OrderBooks(books, index, count, sort); + } + + public async Task>> GetBooksByAuthor( + string name, + int index, + int count, + string sort = "" + ) + { + var books = Stub.Books.Where(b => ContainsAuthorName(b, name)); + return await OrderBooks(books, index, count, sort); + } + + private bool ContainsAuthorName(BookDTO book, string name) + { + IEnumerable authors = new List(); + + if (book.Authors != null && book.Authors.Count > 0) + { + authors = authors.Union(book.Authors); + } + if (book.Works != null) + { + var worksAuthors = book.Works.SelectMany(w => w.Authors).ToList(); + if (worksAuthors.Count > 0) + authors = authors.Union(worksAuthors); + } + foreach (var author in authors) + { + if ( + author.Name.Contains(name, StringComparison.OrdinalIgnoreCase) + || author.AlternateNames.Exists( + alt => alt.Contains(name, StringComparison.OrdinalIgnoreCase) + ) + ) + { + return true; + } + } + return false; + } + + public Task>> GetWorks(int index, int count) + { + long nbWorks = Stub.Works.Count; + var works = Stub.Works.Skip(index * count).Take(count); + return Task.FromResult(Tuple.Create(nbWorks, works)); + } + + public Task GetNbAuthors() => Task.FromResult((long)Stub.Authors.Count); + + public Task GetNbBooks() => Task.FromResult((long)Stub.Books.Count); + + public Task GetNbWorks() => Task.FromResult((long)Stub.Works.Count); +} diff --git a/Sources/Tests/TestsModel/Program.cs b/Sources/Tests/TestsModel/Program.cs index e8f9f9d..c944a5d 100644 --- a/Sources/Tests/TestsModel/Program.cs +++ b/Sources/Tests/TestsModel/Program.cs @@ -18,7 +18,7 @@ WriteLine(); WriteLine("Test Manager.GetBooksByAuthor"); var booksFromHerbert = await manager.GetBooksByAuthor("herbert", 0, 10); -foreach(var b in booksFromHerbert.books) +foreach (var b in booksFromHerbert.books) { WriteLine($"\t{b.Title}"); } @@ -27,7 +27,7 @@ WriteLine(); WriteLine("Test Manager.GetBooks"); var books = await manager.GetBooksByTitle("", 0, 100); -foreach(var b in books.books) +foreach (var b in books.books) { WriteLine($"\t{b.Title}"); } @@ -36,7 +36,8 @@ WriteLine(); WriteLine("Test Manager.AddBook"); var book1 = await manager.AddBookToCollection("/books/OL25910297M"); -if(book1 == null) book1 = await manager.GetBookByIdFromCollection("/books/OL25910297M"); +if (book1 == null) + book1 = await manager.GetBookByIdFromCollection("/books/OL25910297M"); book1.Status = Status.Finished; book1.UserRating = 5; book1.UserNote = "Trop bien !"; @@ -45,7 +46,7 @@ manager.UpdateBook(book1); manager.AddBookToCollection("/books/OL26210208M"); manager.AddBookToCollection("/books/OL27258011M"); var mybooks = await manager.GetBooksFromCollection(0, 100); -foreach(var b in mybooks.books) +foreach (var b in mybooks.books) { WriteLine($"\t{b.Title} {b.UserRating ?? -1}"); } @@ -54,7 +55,7 @@ WriteLine(); WriteLine("Test Manager.GetContacts"); var contacts = await manager.GetContacts(0, 100); -foreach(var c in contacts.contacts) +foreach (var c in contacts.contacts) { WriteLine($"\t{c.FirstName} {c.LastName}"); } @@ -63,38 +64,46 @@ WriteLine(); WriteLine("Test Manager.GetCurrentLoans"); var loans = await manager.GetCurrentLoans(0, 100); -foreach(var l in loans.loans) +foreach (var l in loans.loans) { - WriteLine($"\t{l.Book.Title} -> {l.Loaner.FirstName} {l.Loaner.LastName} ({l.LoanedAt.ToShortDateString()})"); + WriteLine( + $"\t{l.Book.Title} -> {l.Loaner.FirstName} {l.Loaner.LastName} ({l.LoanedAt.ToShortDateString()})" + ); } WriteLine(new string('*', WindowWidth)); WriteLine(); WriteLine("Test Manager.GetPastLoans"); var loans2 = await manager.GetPastLoans(0, 100); -foreach(var l in loans2.loans) +foreach (var l in loans2.loans) { - WriteLine($"\t{l.Book.Title} -> {l.Loaner.FirstName} {l.Loaner.LastName} ({l.LoanedAt.ToShortDateString()})"); + WriteLine( + $"\t{l.Book.Title} -> {l.Loaner.FirstName} {l.Loaner.LastName} ({l.LoanedAt.ToShortDateString()})" + ); } WriteLine(new string('*', WindowWidth)); WriteLine(); WriteLine("Test Manager.GetCurrentBorrowings"); var borrowings = await manager.GetCurrentBorrowings(0, 100); -foreach(var b in borrowings.borrowings) +foreach (var b in borrowings.borrowings) { - WriteLine($"\t{b.Book.Title} -> {b.Owner.FirstName} {b.Owner.LastName} ({b.BorrowedAt.ToShortDateString()})"); + WriteLine( + $"\t{b.Book.Title} -> {b.Owner.FirstName} {b.Owner.LastName} ({b.BorrowedAt.ToShortDateString()})" + ); } WriteLine(new string('*', WindowWidth)); WriteLine(); WriteLine("Test Manager.GetPastBorrowings"); var borrowings2 = await manager.GetPastBorrowings(0, 100); -foreach(var b in borrowings2.borrowings) +foreach (var b in borrowings2.borrowings) { - WriteLine($"\t{b.Book.Title} -> {b.Owner.FirstName} {b.Owner.LastName} ({b.BorrowedAt.ToShortDateString()})"); + WriteLine( + $"\t{b.Book.Title} -> {b.Owner.FirstName} {b.Owner.LastName} ({b.BorrowedAt.ToShortDateString()})" + ); } WriteLine(new string('*', WindowWidth)); WriteLine(); -ReadLine(); \ No newline at end of file +ReadLine(); diff --git a/Sources/ToolKit/Class1.cs b/Sources/ToolKit/Class1.cs index bc64cba..afab435 100644 --- a/Sources/ToolKit/Class1.cs +++ b/Sources/ToolKit/Class1.cs @@ -1,7 +1,4 @@ namespace ToolKit { - public class Class1 - { - - } -} \ No newline at end of file + public class Class1 { } +} diff --git a/Sources/Utils/EnumsMapper.cs b/Sources/Utils/EnumsMapper.cs index 5b4f8eb..eb10f99 100644 --- a/Sources/Utils/EnumsMapper.cs +++ b/Sources/Utils/EnumsMapper.cs @@ -4,15 +4,16 @@ using System.Linq; namespace Utils { - public class EnumsMapper where T : Enum - where U : Enum + public class EnumsMapper + where T : Enum + where U : Enum { readonly HashSet> mapper = new HashSet>(); public T GetModel(U entity) { var result = mapper.Where(tuple => tuple.Item2.Equals(entity)); - if(result.Count() != 1) + if (result.Count() != 1) { return default(T); } @@ -22,7 +23,7 @@ namespace Utils public U GetEntity(T model) { var result = mapper.Where(tuple => tuple.Item1.Equals(model)); - if(result.Count() != 1) + if (result.Count() != 1) { return default(U); } @@ -36,7 +37,7 @@ namespace Utils public void AddRange(params Tuple[] tuples) { - foreach(var t in tuples) + foreach (var t in tuples) { Add(t.Item1, t.Item2); } @@ -48,4 +49,3 @@ namespace Utils } } } - diff --git a/Sources/Utils/Mapper.cs b/Sources/Utils/Mapper.cs index 2021b2f..a6fde86 100644 --- a/Sources/Utils/Mapper.cs +++ b/Sources/Utils/Mapper.cs @@ -1,11 +1,12 @@ - using System; +using System; using System.Collections.Generic; using System.Linq; namespace Utils { - public class Mapper where T : class - where U : class + public class Mapper + where T : class + where U : class { readonly HashSet> mapper = new HashSet>(); @@ -17,7 +18,7 @@ namespace Utils public T GetT(U entity) { var result = mapper.Where(tuple => ReferenceEquals(tuple.Item2, entity)); - if(result.Count() != 1) + if (result.Count() != 1) { return null; } @@ -27,7 +28,7 @@ namespace Utils public U GetU(T model) { var result = mapper.Where(tuple => ReferenceEquals(tuple.Item2, model)); - if(result.Count() != 1) + if (result.Count() != 1) { return null; } @@ -37,10 +38,10 @@ namespace Utils public bool AddMapping(T t, U u) { var mapping = new Tuple(t, u); - if(mapper.Contains(mapping)) return false; + if (mapper.Contains(mapping)) + return false; mapper.Add(mapping); return true; } } } - diff --git a/Sources/VMWrapper/BookViewModel.cs b/Sources/VMWrapper/BookViewModel.cs index a52e25d..2e21e82 100644 --- a/Sources/VMWrapper/BookViewModel.cs +++ b/Sources/VMWrapper/BookViewModel.cs @@ -10,79 +10,68 @@ namespace VMWrapper // All the code in this file is included in all platforms. public class BookViewModel : INotifyPropertyChanged { - ILibraryManager data; + private readonly ILibraryManager data; + public ObservableCollection authorList { get; private set; } = + new ObservableCollection(); + public ObservableCollection bookList { get; private set; } = + new ObservableCollection(); + public ObservableCollection AuteurGroups { get; private set; } = + new ObservableCollection(); - public ObservableCollection authorList { get; private set; } = new ObservableCollection(); - public ObservableCollection bookList { get; private set; } = new ObservableCollection(); - public ObservableCollection AuteurGroups { get; private set; } = new ObservableCollection(); - public event PropertyChangedEventHandler PropertyChanged; - - public BookViewModel(ILibraryManager data) + public BookViewModel(ILibraryManager data) { this.data = data; GetAuthors(); + LoadBooksAsync(); } - - - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) + private async void LoadBooksAsync() { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + try + { + var (totalA, authors) = await data.GetAuthorsByName("", 0, 5); + + foreach (Author author in authors) + { + var books = data.GetBooksByAuthor(author.Name, 0, 5).Result.Item2; + var observableBooks = new ObservableCollection(books); + AuteurGroups.Add(new AuteurGroup(author.Name, observableBooks)); + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(ex.Message); + } } public class AuteurGroup : ObservableCollection { public string Name { get; private set; } - public AuteurGroup(string name, ObservableCollection books): base(books) + public AuteurGroup(string name, ObservableCollection books) + : base(books) { Name = name; } } - public void GetBooks() - { - var objet = data.GetBooksByAuthor("", 0, 8); - var ojb = objet.Result.Item2; - - /*foreach (Book Book in ojb) - { - AuteurGroups.Add(new AuteurGroup(Book.Authors.Name, auteur.Books)); - } - - ObservableCollection auteurs = new Stub().CreateStubData(); - foreach (Auteur auteur in auteurs) - { - AuteurGroups.Add(new AuteurGroup(auteur.Name, auteur.Books)); - } - */ - - } - - public void GetAuthors() { - var objet = data.GetAuthorsByName("",0,10); - var ojb = objet.Result.Item2; + var objet = data.GetAuthorsByName("", 0, 10).Result.Item2; authorList.Clear(); - foreach (var author in ojb) + foreach (var author in objet) { authorList.Add(author); } } - + public event PropertyChangedEventHandler PropertyChanged; - public async Task> GetBooksByTitle() + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { - var objet = await data.GetBooksByTitle("", 0, 9); - var ojb = objet.Item2; - - return new ObservableCollection(ojb); + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } - - } -} \ No newline at end of file +} diff --git a/Sources/VMWrapper/Platforms/Android/PlatformClass1.cs b/Sources/VMWrapper/Platforms/Android/PlatformClass1.cs index 0d87dd3..8d0bdee 100644 --- a/Sources/VMWrapper/Platforms/Android/PlatformClass1.cs +++ b/Sources/VMWrapper/Platforms/Android/PlatformClass1.cs @@ -1,7 +1,5 @@ namespace VMWrapper { // All the code in this file is only included on Android. - public class PlatformClass1 - { - } -} \ No newline at end of file + public class PlatformClass1 { } +} diff --git a/Sources/VMWrapper/Platforms/MacCatalyst/PlatformClass1.cs b/Sources/VMWrapper/Platforms/MacCatalyst/PlatformClass1.cs index 92343e9..a52764f 100644 --- a/Sources/VMWrapper/Platforms/MacCatalyst/PlatformClass1.cs +++ b/Sources/VMWrapper/Platforms/MacCatalyst/PlatformClass1.cs @@ -1,7 +1,5 @@ namespace VMWrapper { // All the code in this file is only included on Mac Catalyst. - public class PlatformClass1 - { - } -} \ No newline at end of file + public class PlatformClass1 { } +} diff --git a/Sources/VMWrapper/Platforms/Tizen/PlatformClass1.cs b/Sources/VMWrapper/Platforms/Tizen/PlatformClass1.cs index 8fdd0bd..4887e66 100644 --- a/Sources/VMWrapper/Platforms/Tizen/PlatformClass1.cs +++ b/Sources/VMWrapper/Platforms/Tizen/PlatformClass1.cs @@ -3,7 +3,5 @@ namespace VMWrapper { // All the code in this file is only included on Tizen. - public class PlatformClass1 - { - } -} \ No newline at end of file + public class PlatformClass1 { } +} diff --git a/Sources/VMWrapper/Platforms/Windows/PlatformClass1.cs b/Sources/VMWrapper/Platforms/Windows/PlatformClass1.cs index b456b51..ccc4f60 100644 --- a/Sources/VMWrapper/Platforms/Windows/PlatformClass1.cs +++ b/Sources/VMWrapper/Platforms/Windows/PlatformClass1.cs @@ -1,7 +1,5 @@ namespace VMWrapper { // All the code in this file is only included on Windows. - public class PlatformClass1 - { - } -} \ No newline at end of file + public class PlatformClass1 { } +} diff --git a/Sources/VMWrapper/Platforms/iOS/PlatformClass1.cs b/Sources/VMWrapper/Platforms/iOS/PlatformClass1.cs index f961f85..3f9414a 100644 --- a/Sources/VMWrapper/Platforms/iOS/PlatformClass1.cs +++ b/Sources/VMWrapper/Platforms/iOS/PlatformClass1.cs @@ -1,7 +1,5 @@ namespace VMWrapper { // All the code in this file is only included on iOS. - public class PlatformClass1 - { - } -} \ No newline at end of file + public class PlatformClass1 { } +}