/// <summary> /// Calculates sum of all SoldBook objects based on SoldBook.Price /// User object as parameter for handling session timer and ping function /// </summary> /// <param name="admin"></param> public static void SumOfSoldBooks(User admin) { bool isSumCalculated = false; do { if (SessionTimer.CheckSessionTimer(admin.SessionTimer) == true || admin.SessionTimer == DateTime.MinValue) { Console.Clear(); GeneralMessage.AdminNotLoggedIn(); break; } Console.Clear(); var api = new API(); var result = api.MoneyEarned(admin.Id); if (result == null) { ErrorMessage.ErrorNoAbort("calculating the sum of all purchases", "the database is corrupt/empty"); } else { SuccessMessage.SuccessWithInt("The sum of all purchases is", result.Value); UserController.SendPing(admin.Id); isSumCalculated = true; } } while (isSumCalculated == false); }
/// <summary> /// Retrieves list of all SoldBook objects present in database /// User object as parameter for handling session timer and ping function /// </summary> /// <param name="admin"></param> public static List <List <object> > ListAllSoldBooks(User admin) { List <List <object> > soldBooksListData = new List <List <object> >(); bool isListed = false; do { if (SessionTimer.CheckSessionTimer(admin.SessionTimer) == true || admin.SessionTimer == DateTime.MinValue) { Console.Clear(); GeneralMessage.AdminNotLoggedIn(); break; } Console.Clear(); var api = new API(); var result = api.SoldItems(admin.Id); if (result == null) { ErrorMessage.ErrorNoAbort("retrieving the list of sold books", "the database is corrupt/empty"); } else { soldBooksListData = SoldBooksConverters.SoldBooksConverter(result); UserController.SendPing(admin.Id); isListed = true; } } while (isListed == false); return(SoldBooksView.SoldBooksListReader(soldBooksListData)); }
/// <summary> /// Retrieves all Users present in database /// User object as parameter for handling session timer and ping function /// </summary> /// <param name="admin"></param> public static List <List <object> > ListAllUsers(User admin) { List <List <object> > userListData = new List <List <object> >(); bool isUsersListed = false; do { if (SessionTimer.CheckSessionTimer(admin.SessionTimer) == true || admin.SessionTimer == DateTime.MinValue) { Console.Clear(); GeneralMessage.AdminNotLoggedIn(); break; } Console.Clear(); var api = new API(); var result = api.ListUsers(admin.Id); if (result == null) { ErrorMessage.ErrorNoAbort("retrieving a list of users", "the database is empty/corrupt"); break; } else { userListData = UserConverters.UserConverter(result); UserController.SendPing(admin.Id); isUsersListed = true; } } while (isUsersListed == false); return(UserView.UserListReader(userListData)); }
/// <summary> /// Adds a new book to database /// User object as parameter for handling session timer and ping function /// </summary> /// <param name="admin"></param> public static void AddBookToInventory(User admin) { bool isBookAdded = false; do { if (SessionTimer.CheckSessionTimer(admin.SessionTimer) == true || admin.SessionTimer == DateTime.MinValue) { Console.Clear(); GeneralMessage.AdminNotLoggedIn(); break; } Console.Clear(); var api = new API(); Console.Write("Enter title:"); var title = Console.ReadLine(); Console.Write("Enter author:"); var author = Console.ReadLine(); Console.Write("Enter price:"); int.TryParse(Console.ReadLine(), out var price); Console.Write("Enter amount:"); int.TryParse(Console.ReadLine(), out var amount); var result = api.AddBook(admin.Id, title, author, price, amount); if (result == false) { var input = ErrorMessage.ErrorAbort("adding a new book", "you entered incorrect data"); if (input != "") { Console.Clear(); break; } } else { SuccessMessage.SuccessWithString("Book added to inventory"); isBookAdded = true; UserController.SendPing(admin.Id); } } while (isBookAdded == false); }
/// <summary> ///Sends ping to server /// </summary> /// <param name="userId"></param> /// <returns>string</returns> public string Ping(int userId) { var ping = string.Empty; using (var db = new EFContext()) { var user = db.Users?.FirstOrDefault(u => u.Id == userId); if (user != null && SessionTimer.CheckSessionTimer(user.SessionTimer) == false) { ping = "Pong"; user.SessionTimer = DateTime.Now; db.Update(user); db.SaveChanges(); Startup.sessionCookie = user; } } return(ping); }
/// <summary> /// User buys book /// </summary> /// <param name="userId"></param> /// <param name="bookId"></param> /// <returns>bool</returns> public bool BuyBook(int userId, int bookId) { bool isPurchaseSuccessful = false; using (var db = new EFContext()) { var user = db.Users?.FirstOrDefault(x => x.Id == userId); if (user != null) { if (SessionTimer.CheckSessionTimer(user.SessionTimer) == false) { var book = db.Books?.FirstOrDefault(x => x.Id == bookId); if (book != null && book.Amount > 0) { SoldBook soldBook = new SoldBook(); soldBook.Title = book.Title; soldBook.Author = book.Author; soldBook.CategoryId = book.CategoryId; soldBook.Price = book.Price; soldBook.PurchaseDate = DateTime.Now; soldBook.UserId = user.Id; book.Amount--; db.Update(book); db.Update(soldBook); isPurchaseSuccessful = true; user.SessionTimer = SessionTimer.SetSessionTimer(user.Id); Startup.sessionCookie = user; db.Update(user); db.SaveChanges(); } } } } return(isPurchaseSuccessful); }
/// <summary> /// Adds book to category /// User object as parameter for handling session timer and ping function /// </summary> /// <param name="admin"></param> public static void AddBookToCategory(User admin) { bool isBookAdded = false; do { if (SessionTimer.CheckSessionTimer(admin.SessionTimer) == true || admin.SessionTimer == DateTime.MinValue) { Console.Clear(); GeneralMessage.AdminNotLoggedIn(); break; } Console.Clear(); var api = new API(); Console.Write("Enter book Id:"); int.TryParse(Console.ReadLine(), out int bookId); Console.Write("Enter category Id:"); int.TryParse(Console.ReadLine(), out int categoryId); var result = api.AddBookToCategory(admin.Id, bookId, categoryId); if (result == false) { var input = ErrorMessage.ErrorAbort("adding a book to a category", "you entered incorrect data"); if (input != "") { Console.Clear(); break; } } else { SuccessMessage.SuccessWithString("Book assigned to category"); isBookAdded = true; UserController.SendPing(admin.Id); } } while (isBookAdded == false); }
/// <summary> /// Creates a new User object. /// User object as parameter for handling session timer and ping function. /// </summary> /// <param name="admin"></param> public static void AddUser(User admin) { bool isUserCreated = false; do { if (SessionTimer.CheckSessionTimer(admin.SessionTimer) == true || admin.SessionTimer == DateTime.MinValue) { Console.Clear(); GeneralMessage.AdminNotLoggedIn(); break; } Console.Clear(); var api = new API(); Console.Write("Enter name: "); var name = Console.ReadLine(); Console.Write("Enter password: "******"adding a user", "or a user with that name already exists"); if (input != "") { Console.Clear(); break; } } else { SuccessMessage.SuccessWithString("A new user was added with name", $"{name} and password {password}"); UserController.SendPing(admin.Id); isUserCreated = true; } } while (isUserCreated == false); }
/// <summary> /// Sets Book objects Amount /// User object as parameter for handling session timer and ping function /// </summary> /// <param name="admin"></param> public static void SetAmount(User admin) { bool isAmountSet = false; do { if (SessionTimer.CheckSessionTimer(admin.SessionTimer) == true || admin.SessionTimer == DateTime.MinValue) { Console.Clear(); GeneralMessage.AdminNotLoggedIn(); break; } Console.Clear(); var api = new API(); Console.Write("Enter book Id:"); int.TryParse(Console.ReadLine(), out var bookId); Console.Write("Enter amount:"); int.TryParse(Console.ReadLine(), out var amount); var result = api.SetAmount(admin.Id, bookId, amount); if (result.isAmountSet == false) { var input = ErrorMessage.ErrorAbort("setting the amount", "you entered incorrect data"); if (input != "") { Console.Clear(); break; } } else { SuccessMessage.SuccessWithInt("Amount set to", result.amount); isAmountSet = true; UserController.SendPing(admin.Id); } } while (isAmountSet == false); }
/// <summary> /// Retrieves all Users matching search term based on User.Name /// User object as parameter for handling session timer and ping function /// </summary> /// <param name="admin"></param> public static List <List <object> > FindUser(User admin) { List <List <object> > userListData = new List <List <object> >(); bool isUsersFound = false; do { if (SessionTimer.CheckSessionTimer(admin.SessionTimer) == true || admin.SessionTimer == DateTime.MinValue) { Console.Clear(); GeneralMessage.AdminNotLoggedIn(); break; } Console.Clear(); var api = new API(); Console.Write("Enter search term: "); var keyword = Console.ReadLine(); var result = api.FindUser(admin.Id, keyword); if (result.Count < 1) { var input = ErrorMessage.ErrorAbort("retrieving users", "the database is corrupt/empty, or your search term gave no matches"); if (input != "") { Console.Clear(); break; } } else { userListData = UserConverters.UserConverter(result); UserController.SendPing(admin.Id); isUsersFound = true; } } while (isUsersFound == false); return(UserView.UserListReader(userListData)); }
/// <summary> /// Adds a new category to database /// User object as parameter for handling session timer and ping function /// </summary> /// <param name="admin"></param> public static void AddCategory(User admin) { bool isCategoryCreated = false; do { if (SessionTimer.CheckSessionTimer(admin.SessionTimer) == true || admin.SessionTimer == DateTime.MinValue) { Console.Clear(); GeneralMessage.AdminNotLoggedIn(); break; } Console.Clear(); var api = new API(); Console.Write("Enter name:"); var categoryName = Console.ReadLine(); var result = api.AddCategory(admin.Id, categoryName); if (result == false) { var input = ErrorMessage.ErrorAbort("creating a new category", "there already is a category with that name"); if (input != "") { Console.Clear(); break; } } else { SuccessMessage.SuccessWithString("A new category was created with the name", $"{categoryName}"); isCategoryCreated = true; UserController.SendPing(admin.Id); } } while (isCategoryCreated == false); }
/// <summary> /// Deletes one(1) Book object from database /// User object as parameter for handling session timer and ping function /// </summary> /// <param name="admin"></param> public static void DeleteBook(User admin) { bool isBookDeleted = false; do { if (SessionTimer.CheckSessionTimer(admin.SessionTimer) == true || admin.SessionTimer == DateTime.MinValue) { Console.Clear(); GeneralMessage.AdminNotLoggedIn(); break; } Console.Clear(); var api = new API(); Console.Write("Enter book Id: "); int.TryParse(Console.ReadLine(), out var bookId); var result = api.DeleteBook(admin.Id, bookId); if (result == false) { var input = ErrorMessage.ErrorAbort("deleting the book", "you entered incorrect data"); if (input != "") { Console.Clear(); break; } } else { SuccessMessage.SuccessWithString("Book deleted"); isBookDeleted = true; UserController.SendPing(admin.Id); } } while (isBookDeleted == false); }
/// <summary> /// Activates a user. /// User object as parameter for handling session timer and ping function. /// </summary> /// <param name="admin"></param> public static void ActivateUser(User admin) { bool isUserActivated = false; do { if (SessionTimer.CheckSessionTimer(admin.SessionTimer) == true || admin.SessionTimer == DateTime.MinValue) { Console.Clear(); GeneralMessage.AdminNotLoggedIn(); break; } Console.Clear(); var api = new API(); Console.Write("Enter user Id: "); int.TryParse(Console.ReadLine(), out int userId); var result = api.ActivateUser(admin.Id, userId); if (result == false) { var input = ErrorMessage.ErrorAbort("activating a user", "you entered incorrect data"); if (input != "") { Console.Clear(); break; } } else { SuccessMessage.SuccessWithString("User is now activated"); UserController.SendPing(admin.Id); isUserActivated = true; } } while (isUserActivated == false); }
public static void BuyBook(User user) { bool isBookPurchased = false; var api = new API(); do { if (SessionTimer.CheckSessionTimer(user.SessionTimer) == true || user.SessionTimer == DateTime.MinValue) { Console.Clear(); BuyBookMessage.UserNotLoggedIn(); break; } else { Console.Clear(); Console.Write("Enter the Id for the book you want to buy: "); int.TryParse(Console.ReadLine(), out var bookId); var result = api.BuyBook(user.Id, bookId); if (result == false) { var input = BuyBookMessage.Error(); if (input != "") { Console.Clear(); break; } } else { BuyBookMessage.Success(); isBookPurchased = true; } } } while (isBookPurchased == false); }
/// <summary> /// Main menu method. This is the center for the application, program flow starts and ends here. /// User object as parameter for handling session timer and ping function. /// Prints different menu's depending on user being logged in/logged out/have administrator privileges /// </summary> /// <param name="user"></param> public static void MainMenu(User user) { while (isMainMenuRunning) { UserController.SendPing(user.Id); user = Startup.sessionCookie; Console.Clear(); ASCII.MainMenuASCII(); //If user is logged out if (SessionTimer.CheckSessionTimer(user.SessionTimer) == true) { Console.WriteLine("[1] Browse books"); Console.WriteLine("[2] Browse categories"); Console.WriteLine("[3] Buy book\n\n"); Console.WriteLine("[4] Register"); Console.WriteLine("[5] Login"); Console.WriteLine("[6] Quit application"); int.TryParse(Console.ReadLine(), out var mainMenuLoggedOutInput); switch (mainMenuLoggedOutInput) { case 1: BookMenuController.BookMenu(); break; case 2: CategoryMenuController.CategoryMenu(); break; case 3: UserController.BuyBook(user); break; case 4: UserController.RegisterNewUser(); break; case 5: UserController.LogInUser(); break; case 6: isMainMenuRunning = false; break; } } //If user is logged in else if (SessionTimer.CheckSessionTimer(user.SessionTimer) == false && user.IsAdmin == false) { Console.WriteLine("[1] Browse books"); Console.WriteLine("[2] Browse categories"); Console.WriteLine("[3] Buy book\n\n"); Console.WriteLine("[4] Logout"); Console.WriteLine("[5] Quit application"); int.TryParse(Console.ReadLine(), out var mainMenuLoggedInInput); switch (mainMenuLoggedInInput) { case 1: BookMenuController.BookMenu(); break; case 2: CategoryMenuController.CategoryMenu(); break; case 3: UserController.BuyBook(user); break; case 4: UserController.LogOutUser(user); break; case 5: isMainMenuRunning = false; break; } } //If user is logged in and is admin else if (SessionTimer.CheckSessionTimer(user.SessionTimer) == false && user.IsAdmin == true) { Console.WriteLine("[1] Browse books"); Console.WriteLine("[2] Browse categories"); Console.WriteLine("[3] Buy book\n\n"); Console.WriteLine("[4] Administrator menu"); Console.WriteLine("[5] Logout"); Console.WriteLine("[6] Quit application"); int.TryParse(Console.ReadLine(), out var mainMenuAdminInput); switch (mainMenuAdminInput) { case 1: BookMenuController.BookMenu(); break; case 2: CategoryMenuController.CategoryMenu(); break; case 3: UserController.BuyBook(user); break; case 4: AdminMenuController.AdminMainMenu(user); break; case 5: UserController.LogOutUser(user); break; case 6: isMainMenuRunning = false; break; } } } }