using System; using ConsoleTools; using WD7UVN_HFT_2023241.Models; namespace WD7UVN_HFT_2023241.Client { public class CRUD { private enum Models { Customer, Employee, Service, MaintainerTeam } private static void MethodChooser(CRUDActions action, Models model) { switch (model) { case Models.Customer: switch (action) { case CRUDActions.GetAll: ReadAll.Customer(); break; case CRUDActions.GetById: Read.Customer(); break; case CRUDActions.Create: Create.Customer(); break; case CRUDActions.Update: Update.Customer(); break; case CRUDActions.Delete: Delete.Customer(); break; } break; case Models.Employee: switch (action) { case CRUDActions.GetAll: ReadAll.Employee(); break; case CRUDActions.GetById: Read.Employee(); break; case CRUDActions.Create: Create.Employee(); break; case CRUDActions.Update: Update.Employee(); break; case CRUDActions.Delete: Delete.Employee(); break; } break; case Models.Service: switch (action) { case CRUDActions.GetAll: ReadAll.Service(); break; case CRUDActions.GetById: Read.Service(); break; case CRUDActions.Create: Create.Service(); break; case CRUDActions.Update: Update.Service(); break; case CRUDActions.Delete: Delete.Service(); break; } break; case Models.MaintainerTeam: switch (action) { case CRUDActions.GetAll: ReadAll.MaintainerTeam(); break; case CRUDActions.GetById: Read.MaintainerTeam(); break; case CRUDActions.Create: Create.MaintainerTeam(); break; case CRUDActions.Update: Update.MaintainerTeam(); break; case CRUDActions.Delete: Delete.MaintainerTeam(); break; } break; } } public static void TypeSelectorMenu(CRUDActions action) { var menu = new ConsoleMenu(); menu.Add("Customer", () => MethodChooser(action, Models.Customer)); menu.Add("Employee", () => MethodChooser(action, Models.Employee)); menu.Add("Service", () => MethodChooser(action, Models.Service)); menu.Add("Maintainer team", () => MethodChooser(action, Models.MaintainerTeam)); menu.Add("Back", ConsoleMenu.Close); menu.Show(); } //generic methods are nice and all, but in this instance they would be a pain to implement as they would neccessitate a lot of reflection // public static void Read() // { // var menu = new ConsoleMenu(); // foreach (T c in RestService.Get("/api/" + typeof(T).Name + "/")) // { // menu.Add($"{c}", () => Console.WriteLine(c)); // } // menu.Add("Back", ConsoleMenu.Close); // menu.Show(); // } } public class Read { private static void RESTCustomer(int id) { Customer res = RestService.Get(id, "/api/Customer/"); if (res != null) { Console.WriteLine("Name: " + res.NAME); Console.WriteLine("ID: " + res.ID); Console.WriteLine("Email: " + res.EMAIL); Console.WriteLine("Phone: " + res.PHONE); } else { Console.WriteLine("No such database entry was found :/"); } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } public static void Customer() { var menu = new ConsoleMenu(); foreach (Customer c in RestService.Get("/api/Customer/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTCustomer(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } private static void RESTEmployee(int id) { Employee res = RestService.Get(id, "/api/Employee/"); if (res != null) { Console.WriteLine("Name: " + res.NAME); Console.WriteLine("ID: " + res.ID); Console.WriteLine("Email: " + res.EMAIL); Console.WriteLine("Phone: " + res.PHONE); Console.WriteLine("Maintainer team's ID: " + res.MAINTAINER_ID); Console.WriteLine("Manager's ID: " + res.MANAGER_ID); } else { Console.WriteLine("No such database entry was found :/"); } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } public static void Employee() { var menu = new ConsoleMenu(); foreach (Employee c in RestService.Get("/api/Employee/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTEmployee(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } private static void RESTService(int id) { Service res = RestService.Get(id, "/api/Service/"); if (res != null) { Console.WriteLine("Name: " + res.NAME); Console.WriteLine("ID: " + res.ID); Console.WriteLine("Account: " + res.ACCOUNT); Console.WriteLine("IP: " + res.IP); Console.WriteLine("Port: " + res.PORT); Console.WriteLine("Notes: " + res.NOTES); Console.WriteLine("Service domain: " + res.SERVICE_DOMAIN); Console.WriteLine("Version: " + res.VERSION); Console.WriteLine("Maintainer team's ID: " + res.MAINTAINER_ID); } else { Console.WriteLine("No such database entry was found :/"); } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } public static void Service() { var menu = new ConsoleMenu(); foreach (Service c in RestService.Get("/api/Service/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTService(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } private static void RESTMaintainerTeam(int id) { MaintainerTeam res = RestService.Get(id, "/api/MaintainerTeam/"); if (res != null) { Console.WriteLine("Name: " + res.NAME); Console.WriteLine("ID: " + res.ID); Console.WriteLine("Email: " + res.EMAIL); Console.WriteLine("Leader's ID: " + res.LEADER_ID); } else { Console.WriteLine("No such database entry was found :/"); } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } public static void MaintainerTeam() { var menu = new ConsoleMenu(); foreach (MaintainerTeam c in RestService.Get("/api/MaintainerTeam/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTMaintainerTeam(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } } public class ReadAll { public static void Customer() { foreach (Customer c in RestService.Get("/api/Customer/")) { Console.WriteLine("Name: " + c.NAME); Console.WriteLine("ID: " + c.ID); Console.WriteLine("Email: " + c.EMAIL); Console.WriteLine("Phone: " + c.PHONE); Console.WriteLine("ID of used service: " + c.SERVICE_ID); Console.WriteLine(); } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } public static void Employee() { foreach (Employee c in RestService.Get("/api/Employee/")) { Console.WriteLine("Name: " + c.NAME); Console.WriteLine("ID: " + c.ID); Console.WriteLine("Email: " + c.EMAIL); Console.WriteLine("Phone: " + c.PHONE); Console.WriteLine("Maintainer team's ID: " + c.MAINTAINER_ID); Console.WriteLine("Manager's ID: " + c.MANAGER_ID); Console.WriteLine(); } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } public static void Service() { foreach (Service c in RestService.Get("/api/Service/")) { Console.WriteLine("Name: " + c.NAME); Console.WriteLine("ID: " + c.ID); Console.WriteLine("Account: " + c.ACCOUNT); Console.WriteLine("IP: " + c.IP); Console.WriteLine("Port: " + c.PORT); Console.WriteLine("Notes: " + c.NOTES); Console.WriteLine("Service domain: " + c.SERVICE_DOMAIN); Console.WriteLine("Version: " + c.VERSION); Console.WriteLine("Maintainer team's ID: " + c.MAINTAINER_ID); Console.WriteLine(); } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } public static void MaintainerTeam() { foreach (MaintainerTeam c in RestService.Get("/api/MaintainerTeam/")) { Console.WriteLine("Name: " + c.NAME); Console.WriteLine("ID: " + c.ID); Console.WriteLine("Email: " + c.EMAIL); Console.WriteLine("Leader's ID: " + c.LEADER_ID); Console.WriteLine(); } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } } public class Create { public static void Customer() { try { Console.Write("ID (integer): "); int id = Convert.ToInt32(Console.ReadLine()); Console.Write("Name (text): "); string name = Console.ReadLine(); Console.Write("Email (text): "); string email = Console.ReadLine(); Console.Write("Phone (text): "); string phone = Console.ReadLine(); Console.Write("ServiceID (integer): "); int service_id = Convert.ToInt32(Console.ReadLine()); Customer c = new Customer() { ID = id, NAME = name, EMAIL = email, PHONE = phone, SERVICE_ID = service_id }; RestService.Put(c, "/api/Customer/"); Console.WriteLine("\nSuccessfully created Customer with ID {0}", id); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } catch (FormatException) { Console.WriteLine("Invalid format!"); } } public static void Employee() { try { Console.Write("ID (integer): "); int id = Convert.ToInt32(Console.ReadLine()); Console.Write("Name (text): "); string name = Console.ReadLine(); Console.Write("Email (text): "); string email = Console.ReadLine(); Console.Write("Phone (text): "); string phone = Console.ReadLine(); Console.Write("Team ID (integer): "); int maintainer_id = Convert.ToInt32(Console.ReadLine()); Console.Write("Manager's ID (integer): "); int manager_id = Convert.ToInt32(Console.ReadLine()); Employee c = new Employee() { ID = id, NAME = name, EMAIL = email, PHONE = phone, MAINTAINER_ID = maintainer_id, MANAGER_ID = manager_id }; RestService.Put(c, "/api/Employee/"); Console.WriteLine("\nSuccessfully created Customer with ID {0}", id); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } catch (FormatException) { Console.WriteLine("Invalid format!"); } } public static void Service() { try { Console.Write("ID (integer): "); int id = Convert.ToInt32(Console.ReadLine()); Console.Write("Name (text): "); string name = Console.ReadLine(); Console.Write("Maintainer team's ID (integer): "); int maintainer_id = Convert.ToInt32(Console.ReadLine()); Console.Write("Version (string): "); string version = Console.ReadLine(); Console.Write("IP (text): "); string ip = Console.ReadLine(); Console.Write("Port (integer): "); int port = Convert.ToInt32(Console.ReadLine()); Console.Write("Service account (text): "); string account = Console.ReadLine(); Console.Write("Service domain (text): "); string domain = Console.ReadLine(); Console.Write("Note(s) (text): "); string notes = Console.ReadLine(); Service c = new Service() { ID = id, NAME = name, MAINTAINER_ID = maintainer_id, PORT = port, IP = ip, SERVICE_DOMAIN = domain, ACCOUNT = account, NOTES = notes, VERSION = version }; RestService.Put(c, "/api/Service/"); Console.WriteLine("\nSuccessfully created Customer with ID {0}", id); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } catch (FormatException) { Console.WriteLine("Invalid format!"); } } public static void MaintainerTeam() { try { Console.Write("ID (integer): "); int id = Convert.ToInt32(Console.ReadLine()); Console.Write("Name (text): "); string name = Console.ReadLine(); Console.Write("Email (text): "); string email = Console.ReadLine(); Console.Write("Leader's ID (integer): "); int leader_id = Convert.ToInt32(Console.ReadLine()); MaintainerTeam c = new MaintainerTeam() { ID = id, NAME = name, LEADER_ID = leader_id, EMAIL = email }; RestService.Put(c, "/api/MaintainerTeam/"); Console.WriteLine("\nSuccessfully created Customer with ID {0}", id); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } catch (FormatException) { Console.WriteLine("Invalid format!"); } } } public class Update { private static void RESTCustomer(int id) { Customer c = RestService.Get(id, "/api/Customer/"); Console.WriteLine("Name: " + c.NAME); Console.WriteLine("Email: " + c.EMAIL); Console.WriteLine("Phone: " + c.PHONE); Console.WriteLine("ID of used service: " + c.SERVICE_ID); Console.WriteLine("Now you can modify these fields, except for the ID."); while (true) { try { Console.Write("Name (text): "); string name = Console.ReadLine(); Console.Write("Email (text): "); string email = Console.ReadLine(); Console.Write("Phone (text): "); string phone = Console.ReadLine(); Console.Write("ServiceID (integer): "); int service_id = Convert.ToInt32(Console.ReadLine()); c = new Customer() { ID = id, NAME = name, EMAIL = email, PHONE = phone, SERVICE_ID = service_id }; RestService.Post(c, "/api/Customer/"); break; } catch (FormatException) { Console.WriteLine("Invalid format!"); } } } public static void Customer() { var menu = new ConsoleMenu(); foreach (Customer c in RestService.Get("/api/Customer/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTCustomer(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } private static void RESTEmployee(int id) { Employee c = RestService.Get(id, "/api/Employee/"); Console.WriteLine("Name: " + c.NAME); Console.WriteLine("Email: " + c.EMAIL); Console.WriteLine("Phone: " + c.PHONE); Console.WriteLine("Maintainer team's ID: " + c.MAINTAINER_ID); Console.WriteLine("Manager's ID: " + c.MANAGER_ID); Console.WriteLine("Now you can modify these fields, except for the ID."); while (true) { try { Console.Write("Name (text): "); string name = Console.ReadLine(); Console.Write("Email (text): "); string email = Console.ReadLine(); Console.Write("Phone (text): "); string phone = Console.ReadLine(); Console.Write("Team ID (integer): "); int maintainer_id = Convert.ToInt32(Console.ReadLine()); Console.Write("Manager's ID (integer): "); int manager_id = Convert.ToInt32(Console.ReadLine()); c = new Employee() { ID = id, NAME = name, EMAIL = email, PHONE = phone, MANAGER_ID = manager_id, MAINTAINER_ID = maintainer_id }; RestService.Post(c, "/api/Employee/"); break; } catch (FormatException) { Console.WriteLine("Invalid format!"); } } } public static void Employee() { var menu = new ConsoleMenu(); foreach (Employee c in RestService.Get("/api/Employee/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTEmployee(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } private static void RESTService(int id) { Service c = RestService.Get(id, "/api/Service/"); Console.WriteLine("Name: " + c.NAME); Console.WriteLine("ID: " + c.ID); Console.WriteLine("Account: " + c.ACCOUNT); Console.WriteLine("IP: " + c.IP); Console.WriteLine("Port: " + c.PORT); Console.WriteLine("Notes: " + c.NOTES); Console.WriteLine("Service domain: " + c.SERVICE_DOMAIN); Console.WriteLine("Version: " + c.VERSION); Console.WriteLine("Maintainer team's ID: " + c.MAINTAINER_ID); Console.WriteLine("Now you can modify these fields, except for the ID."); while (true) { try { Console.Write("Name (text): "); string name = Console.ReadLine(); Console.Write("Maintainer team's ID (integer): "); int maintainer_id = Convert.ToInt32(Console.ReadLine()); Console.Write("Version (string): "); string version = Console.ReadLine(); Console.Write("IP (text): "); string ip = Console.ReadLine(); Console.Write("Port (integer): "); int port = Convert.ToInt32(Console.ReadLine()); Console.Write("Service account (text): "); string account = Console.ReadLine(); Console.Write("Service domain (text): "); string domain = Console.ReadLine(); Console.Write("Note(s) (text): "); string notes = Console.ReadLine(); c = new Service() { ID = id, NAME = name, MAINTAINER_ID = maintainer_id, PORT = port, IP = ip, SERVICE_DOMAIN = domain, ACCOUNT = account, NOTES = notes, VERSION = version }; RestService.Post(c, "/api/Service/"); break; } catch (FormatException) { Console.WriteLine("Invalid format!"); } } } public static void Service() { var menu = new ConsoleMenu(); foreach (Service c in RestService.Get("/api/Service/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTService(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } private static void RESTMaintainerTeam(int id) { MaintainerTeam c = RestService.Get(id, "/api/MaintainerTeam/"); Console.WriteLine("Name: " + c.NAME); Console.WriteLine("ID: " + c.ID); Console.WriteLine("Email: " + c.EMAIL); Console.WriteLine("Leader's ID: " + c.LEADER_ID); Console.WriteLine("Now you can modify these fields, except for the ID."); while (true) { try { Console.Write("Name (text): "); string name = Console.ReadLine(); Console.Write("Email (text): "); string email = Console.ReadLine(); Console.Write("Leader's ID (integer): "); int leader_id = Convert.ToInt32(Console.ReadLine()); c = new MaintainerTeam() { ID = id, NAME = name, LEADER_ID = leader_id, EMAIL = email }; RestService.Post(c, "/api/MaintainerTeam/"); break; } catch (FormatException) { Console.WriteLine("Invalid format!"); } } } public static void MaintainerTeam() { var menu = new ConsoleMenu(); foreach (MaintainerTeam c in RestService.Get("/api/MaintainerTeam/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTMaintainerTeam(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } } public class Delete { private static void RESTCustomer(int id) { try { RestService.Delete(id, "/api/Customer/"); Console.WriteLine("Successfully deleted Customer with ID {0}", id); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } catch (Exception e) { Console.WriteLine("The following error occured:"); Console.WriteLine(e.Message); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } } public static void Customer() { var menu = new ConsoleMenu(); foreach (Customer c in RestService.Get("/api/Customer/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTCustomer(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } private static void RESTEmployee(int id) { try { RestService.Delete(id, "/api/Employee/"); Console.WriteLine("Successfully deleted Employee with ID {0}", id); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } catch (Exception e) { Console.WriteLine("The following error occured:"); Console.WriteLine(e.Message); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } } public static void Employee() { var menu = new ConsoleMenu(); foreach (Employee c in RestService.Get("/api/Employee/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTEmployee(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } private static void RESTService(int id) { try { RestService.Delete(id, "/api/Service/"); Console.WriteLine("Successfully deleted Service with ID {0}", id); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } catch (Exception e) { Console.WriteLine("The following error occured:"); Console.WriteLine(e.Message); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } } public static void Service() { var menu = new ConsoleMenu(); foreach (Service c in RestService.Get("/api/Service/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTService(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } private static void RESTMaintainerTeam(int id) { try { RestService.Delete(id, "/api/MaintainerTeam/"); Console.WriteLine("Successfully deleted MaintainerTeam with ID {0}", id); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } catch (Exception e) { Console.WriteLine("The following error occured:"); Console.WriteLine(e.Message); Console.WriteLine("Press any key to continue."); Console.ReadKey(); } } public static void MaintainerTeam() { var menu = new ConsoleMenu(); foreach (MaintainerTeam c in RestService.Get("/api/MaintainerTeam/")) { menu.Add($"{c.NAME}: {c.ID}", () => RESTMaintainerTeam(c.ID)); } menu.Add("Back", ConsoleMenu.Close); menu.Show(); } } }