diff --git a/MCTG/Managers/RecipeDefaultManager.cs b/MCTG/Managers/RecipeDefaultManager.cs index feb69a7..117744a 100644 --- a/MCTG/Managers/RecipeDefaultManager.cs +++ b/MCTG/Managers/RecipeDefaultManager.cs @@ -56,7 +56,7 @@ namespace Managers public RecipeCollection SearchRecipeByTitle(string title) { IEnumerable recipes = from Recipe recipe in _dataManager.GetFromData() - where recipe.Title.Contains(title) + where recipe.Title.ToLower().Contains(title.ToLower()) select recipe; return new RecipeCollection( $"Search for '{title}'", recipes.ToArray()); diff --git a/MCTG/Managers/UserDefaultManager.cs b/MCTG/Managers/UserDefaultManager.cs index 9a2bf5f..483d051 100644 --- a/MCTG/Managers/UserDefaultManager.cs +++ b/MCTG/Managers/UserDefaultManager.cs @@ -1,32 +1,32 @@ -using AppException; -using Model; -using System; -using System.Collections.Generic; +using AppException; +using Model; +using System; +using System.Collections.Generic; using System.ComponentModel; -using System.Diagnostics; -using System.Linq; +using System.Diagnostics; +using System.Linq; using System.Runtime.CompilerServices; -using System.Security.Cryptography; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; - -namespace Managers -{ - public class UserDefaultManager : IUserManager, INotifyPropertyChanging - { - private IDataManager _dataManager; - private IPasswordManager _passwordManager; - private User? _currentConnected = null; - - - public UserDefaultManager(IDataManager dataManager, IPasswordManager passwordManager) - { - _dataManager = dataManager; - _passwordManager = passwordManager; - } - - +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace Managers +{ + public class UserDefaultManager : IUserManager, INotifyPropertyChanging + { + private IDataManager _dataManager; + private IPasswordManager _passwordManager; + private User? _currentConnected = null; + + + public UserDefaultManager(IDataManager dataManager, IPasswordManager passwordManager) + { + _dataManager = dataManager; + _passwordManager = passwordManager; + } + + public User? CurrentConnected { get => _currentConnected; @@ -35,115 +35,115 @@ namespace Managers _currentConnected = value; OnPropertyChanged(); } - } - + } + public IPasswordManager PasswordManager => _passwordManager; - public event PropertyChangingEventHandler? PropertyChanging; - - public void OnPropertyChanged([CallerMemberName] string pname = "") - => PropertyChanging?.Invoke(this, new PropertyChangingEventArgs(pname)); - - - public bool AddUserToData(User user) - { - var userList = _dataManager.Data[nameof(User)]; - - if (userList.Exists(r => r.Equals(user))) - return false; - - _dataManager.Data[nameof(User)].Add(user); - return true; - } - - public User CreateUser(string mail, string password, - string? name = null, string? surname = null, string? profilePict = null) - { - if (name is null) name = $"user{GetRandomInt()}"; - if (surname is null) surname = ""; - if (profilePict is null) profilePict = "default_user_picture.png"; - - const string mailRegex = @"^([\w\.-]+)@([\w\.-]+\.\w+)$"; - if (!Regex.Match(mail, mailRegex).Success) - throw new BadMailFormatException(); - - string hashedPassword = PasswordManager.HashPassword(password); - return new User(name, surname, mail, hashedPassword, profilePict); - } - - public ICollection GetAllUsers() - { - return _dataManager.GetFromData(); - } - - public User GetUserFromMail(string mail) - { - User? user = _dataManager.GetFromData().ToList() - .Find(u => u.Mail == mail); - if (user is null) - throw new UserNotFoundException(); - - return user; - } - - public bool LogIn(string mail, string password) - { - if (CurrentConnected is not null) - throw new UserAlreadyConnectedException(); - -#if DEBUG - if (mail == "admin") - { - CurrentConnected = _dataManager.GetFromData() - .FirstOrDefault(u => u.Mail == "admin@mctg.fr"); - return true; - } -#endif - - User? user = _dataManager.GetFromData().ToList() - .Find(u => u.Mail == mail); - if (user is null) - return false; - - if (!_passwordManager.VerifyPassword(user.Password, password)) - return false; - - CurrentConnected = user; - return true; - } - - public void LogOut() - { - if (CurrentConnected is null) - throw new NoUserConnectedException(); - - CurrentConnected = null; - } - - public bool ModifyCurrentConnected(User newUser) - { - try - { - var index = _dataManager.GetFromData().ToList() - .FindIndex(u => u.Equals(CurrentConnected)); - _dataManager.Data[nameof(User)][index] = newUser; - } - catch (ArgumentNullException e) - { - Debug.WriteLine("User to modify not found.\n" + e.Message); - return false; - } - - return true; - } - - private int GetRandomInt() - { - var randomGenerator = RandomNumberGenerator.Create(); - byte[] data = new byte[16]; - randomGenerator.GetBytes(data); - return Math.Abs(BitConverter.ToInt16(data)); - } - } -} + public event PropertyChangingEventHandler? PropertyChanging; + + public void OnPropertyChanged([CallerMemberName] string pname = "") + => PropertyChanging?.Invoke(this, new PropertyChangingEventArgs(pname)); + + + public bool AddUserToData(User user) + { + var userList = _dataManager.Data[nameof(User)]; + + if (userList.Exists(r => r.Equals(user))) + return false; + + _dataManager.Data[nameof(User)].Add(user); + return true; + } + + public User CreateUser(string mail, string password, + string? name = null, string? surname = null, string? profilePict = null) + { + if (name is null) name = $"user{GetRandomInt()}"; + if (surname is null) surname = ""; + if (profilePict is null) profilePict = "default_user_picture.png"; + + const string mailRegex = @"^([\w\.-]+)@([\w\.-]+\.\w+)$"; + if (!Regex.Match(mail, mailRegex).Success) + throw new BadMailFormatException(); + + string hashedPassword = PasswordManager.HashPassword(password); + return new User(name, surname, mail, hashedPassword, profilePict); + } + + public ICollection GetAllUsers() + { + return _dataManager.GetFromData(); + } + + public User GetUserFromMail(string mail) + { + User? user = _dataManager.GetFromData().ToList() + .Find(u => u.Mail == mail); + if (user is null) + throw new UserNotFoundException(); + + return user; + } + + public bool LogIn(string mail, string password) + { + if (CurrentConnected is not null) + throw new UserAlreadyConnectedException(); + +#if DEBUG + if (mail == "admin") + { + CurrentConnected = _dataManager.GetFromData() + .FirstOrDefault(u => u.Mail == "admin@mctg.fr"); + return true; + } +#endif + + User? user = _dataManager.GetFromData().ToList() + .Find(u => u.Mail == mail); + if (user is null) + return false; + + if (!_passwordManager.VerifyPassword(user.Password, password)) + return false; + + CurrentConnected = user; + return true; + } + + public void LogOut() + { + if (CurrentConnected is null) + throw new NoUserConnectedException(); + + CurrentConnected = null; + } + + public bool ModifyCurrentConnected(User newUser) + { + try + { + var index = _dataManager.GetFromData().ToList() + .FindIndex(u => u.Equals(CurrentConnected)); + _dataManager.Data[nameof(User)][index] = newUser; + } + catch (ArgumentNullException e) + { + Debug.WriteLine("User to modify not found.\n" + e.Message); + return false; + } + + return true; + } + + private int GetRandomInt() + { + var randomGenerator = RandomNumberGenerator.Create(); + byte[] data = new byte[16]; + randomGenerator.GetBytes(data); + return Math.Abs(BitConverter.ToInt16(data)); + } + } +} diff --git a/MCTG/Model/Managers/IDataManager.cs b/MCTG/Model/Managers/IDataManager.cs index ccd40c7..0358988 100644 --- a/MCTG/Model/Managers/IDataManager.cs +++ b/MCTG/Model/Managers/IDataManager.cs @@ -17,7 +17,7 @@ namespace Model ///
The setter is actually public for testing purpose. It will be private after. ///
See: /// - IDataSerializer Serializer { get; } + IDataSerializer Serializer { get; set; } /// /// The collection of all data. Each line of this dictionary has the type of the data as it key and the data for values. diff --git a/MCTG/Model/Users/User.cs b/MCTG/Model/Users/User.cs index 86dd823..63f9d29 100644 --- a/MCTG/Model/Users/User.cs +++ b/MCTG/Model/Users/User.cs @@ -14,12 +14,12 @@ namespace Model public class User : IEquatable , INotifyPropertyChanged { #region Private Attributes - [DataMember] private string _name = ""; - [DataMember] private string _surname = ""; - [DataMember] private string _mail = ""; + [DataMember(Name = "name")] private string _name = ""; + [DataMember(Name = "surname")] private string _surname = ""; + [DataMember(Name = "mail")] private string _mail = ""; [DataMember(Name = "priorities")] - public ObservableCollection _priorities { get; private set; } = new ObservableCollection + private readonly List _priorities = new List { Priority.Gourmet, Priority.Economic, @@ -28,7 +28,9 @@ namespace Model Priority.Easy }; - public event PropertyChangedEventHandler? PropertyChanged; + + + public event PropertyChangedEventHandler? PropertyChanged; #endregion #region Properties @@ -98,7 +100,7 @@ namespace Model /// This is the list of priorities specific tu the user. This list is initiate /// by default. User could change it at will. /// - public ReadOnlyObservableCollection Priorities { get; private set; } + public List Priorities => _priorities; #endregion #region Methods @@ -150,7 +152,7 @@ namespace Model Surname = surname; Mail = mail; Password = hashedPassword; - Priorities = new ReadOnlyObservableCollection(_priorities); + } /// @@ -176,7 +178,6 @@ namespace Model Mail = user.Mail; Password = user.Password; _priorities = user._priorities; - Priorities = new ReadOnlyObservableCollection(_priorities); ProfilePict = user.ProfilePict; } #endregion diff --git a/MCTG/Persistance/FakePersistance/Stubs.cs b/MCTG/Persistance/FakePersistance/Stubs.cs index cfad2b9..2104e48 100644 --- a/MCTG/Persistance/FakePersistance/Stubs.cs +++ b/MCTG/Persistance/FakePersistance/Stubs.cs @@ -177,7 +177,6 @@ namespace FakePersistance surname: "Amigos", mail: "pedrosamigos@hotmail.com", hashedPassword: psswdMgr.HashPassword("pamigos")) - }) #endregion } diff --git a/MCTG/Views/App.xaml.cs b/MCTG/Views/App.xaml.cs index 96fe65d..1a42638 100644 --- a/MCTG/Views/App.xaml.cs +++ b/MCTG/Views/App.xaml.cs @@ -42,9 +42,7 @@ namespace Views // Change the data serializer if the one in place is 'Stubs' if (Master.Data.Serializer.GetType() == typeof(Stubs)) { - var data = Master.Data.Data; - dataManager = new DataDefaultManager(dataSerializer, data); - Master = new MasterManager(dataManager, recipeManager, userManager); + Master.Data.Serializer = dataSerializer; } // Save data. diff --git a/MCTG/Views/ContentPages/Home.xaml b/MCTG/Views/ContentPages/Home.xaml index 38b81e3..3120fc2 100644 --- a/MCTG/Views/ContentPages/Home.xaml +++ b/MCTG/Views/ContentPages/Home.xaml @@ -25,6 +25,12 @@ SearchButtonPressed="SearchBar_SearchButtonPressed"/> +