/// <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);
        }
示例#5
0
        /// <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);
        }
示例#6
0
        /// <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);
        }
示例#14
0
        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);
        }
示例#15
0
        /// <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;
                    }
                }
            }
        }