static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile("appsettings.json")
                         .Build();

            IDbConnection conn = new MySqlConnection(config.GetConnectionString("DefaultConnection"));

            bool quit = false;

            do
            {
                Console.WriteLine("\nNew Department:    D,    New Product:     P\n" +
                                  "Remove Department: X,    Update Product:  U\n" +
                                  "Quit:              Q,    Remove Product:  R\n");

                switch (Console.ReadLine().ToLower())
                {
                case "d":
                {
                    var repo = new DapperDepartmentRepository(conn);

                    Console.WriteLine("Enter a new department name:");

                    var newDepartment = Console.ReadLine();

                    repo.InsertDepartment(newDepartment);
                    Console.WriteLine();

                    foreach (var item in repo.GetAllDepartments())
                    {
                        Console.WriteLine(item.Name);
                    }
                } break;

                case "x":
                {
                    var repo = new DapperDepartmentRepository(conn);
                    foreach (var item in repo.GetAllDepartments())
                    {
                        Console.WriteLine(item.Name);
                    }

                    Console.WriteLine("\nEnter name of Department to remove:");
                    string temp = Console.ReadLine();
                    if (null == repo.GetDepartment(temp))
                    {
                        Console.WriteLine("Invalid Department Name");
                        continue;
                    }

                    Console.WriteLine($"Deleting {temp} department\n");
                    repo.DeleteDepartment(temp);
                    foreach (var item in repo.GetAllDepartments())
                    {
                        Console.WriteLine(item.Name);
                    }
                } break;

                case "q": quit = true; break;

                case "p":
                {
                    Console.WriteLine("Add a new product (category = \'Other\'):");
                    var otherName = Console.ReadLine();
                    Console.WriteLine("Price:");
                    var otherPrice = Double.Parse(Console.ReadLine());

                    var prodRepo = new DapperProductRepository(conn);
                    prodRepo.CreateProduct(otherName, otherPrice, 10);

                    Console.WriteLine($"\n\nFind new {otherName} at the bottom:");
                    foreach (var item in prodRepo.GetAllProducts())
                    {
                        Console.WriteLine($"{item.Name}: ${item.Price}, ID {item.ProductID}");
                    }
                } break;

                case "u":
                {
                    var prodRepo = new DapperProductRepository(conn);
                    foreach (var item in prodRepo.GetAllProducts())
                    {
                        Console.WriteLine($"{item.Name}: ${item.Price}, ID {item.ProductID}");
                    }
                    Console.WriteLine("\nProduct ID to change:");

                    int changeProductID;
                    if (Int32.TryParse(Console.ReadLine(), out changeProductID) == false)
                    {
                        Console.WriteLine("Invalid input");
                        continue;
                    }

                    var queryProduct = new Product();
                    queryProduct = prodRepo.GetProduct(changeProductID);
                    if (queryProduct == null)
                    {
                        Console.WriteLine("Invalid ProductID");
                        continue;
                    }

                    Console.WriteLine($"New name (or just <Enter> to keep '{queryProduct.Name}'):");
                    var temp      = Console.ReadLine();
                    var otherName = temp == "" ? queryProduct.Name : temp;

                    Console.WriteLine($"New price (or just <Enter> to keep {queryProduct.Price}):");
                    temp = Console.ReadLine();

                    double otherPrice;
                    if (temp == "")
                    {
                        otherPrice = queryProduct.Price;
                    }
                    else
                    {
                        otherPrice = double.Parse(temp);
                    }

                    prodRepo.UpdateProduct(otherName, otherPrice, changeProductID);

                    Console.WriteLine($"{queryProduct.Name}: ${queryProduct.Price}, ID {changeProductID} changed to");
                    queryProduct = prodRepo.GetProduct(changeProductID);
                    Console.WriteLine($"{queryProduct.Name}: ${queryProduct.Price}, ID {changeProductID}");
                } break;

                case "r":
                {
                    var prodRepo = new DapperProductRepository(conn);
                    foreach (var item in prodRepo.GetAllProducts())
                    {
                        Console.WriteLine($"{item.Name}: ${item.Price}, ID {item.ProductID}");
                    }
                    Console.WriteLine("\nProduct ID to remove:");

                    int changeProductID;
                    if (Int32.TryParse(Console.ReadLine(), out changeProductID) == false)
                    {
                        Console.WriteLine("Invalid input");
                        continue;
                    }

                    var queryProduct = new Product();
                    queryProduct = prodRepo.GetProduct(changeProductID);
                    if (queryProduct == null)
                    {
                        Console.WriteLine("Invalid ProductID");
                        continue;
                    }

                    Console.WriteLine("Removing product:\n" +
                                      $"{queryProduct.Name}: ${queryProduct.Price}, ID {queryProduct.ProductID}\n");
                    prodRepo.RemoveProduct(changeProductID);

                    var salesRepo = new DapperSalesRepository(conn);
                    if (salesRepo.GetSalesItem(changeProductID).Count() != 0)
                    {
                        Console.WriteLine("Removing from Sales");
                        salesRepo.RemoveProduct(changeProductID);
                    }
                    else
                    {
                        Console.WriteLine("Not found in Sales");
                    }

                    var reviewsRepo = new DapperReviewsRepository(conn);
                    if (reviewsRepo.GetReviewItem(changeProductID).Count() != 0)
                    {
                        Console.WriteLine("Removing from Reviews");
                        reviewsRepo.RemoveProduct(changeProductID);
                    }
                    else
                    {
                        Console.WriteLine("Not found in Reviews");
                    }

                    foreach (var item in prodRepo.GetAllProducts())
                    {
                        Console.WriteLine($"{item.Name}: ${item.Price}, ID {item.ProductID}");
                    }
                } break;

                default: quit = true; break;
                }
            }while (quit == false);
        }