2023-12-13 22:04:13 +01:00
|
|
|
using System;
|
2024-01-09 21:38:42 +01:00
|
|
|
using System.Reflection;
|
2024-01-08 16:59:30 +01:00
|
|
|
using ConsoleTools;
|
2023-12-13 22:04:13 +01:00
|
|
|
using WD7UVN_HFT_2023241.Models;
|
|
|
|
|
|
2024-03-26 11:35:07 +01:00
|
|
|
namespace WD7UVN_HFT_2023241.Client.TUI
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-08 16:59:30 +01:00
|
|
|
public class CRUD
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
public delegate void CRUDMethod<T>(T obj);
|
2023-12-13 22:04:13 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
private static void MethodChooser<T>(CRUDActions action)
|
2024-01-08 16:59:30 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
CRUDMethod<T> method = null;
|
|
|
|
|
switch (action)
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
case CRUDActions.GetAll:
|
2024-01-09 22:52:59 +01:00
|
|
|
method = View.DisplayAll;
|
2024-01-08 16:59:30 +01:00
|
|
|
break;
|
2024-01-09 21:38:42 +01:00
|
|
|
case CRUDActions.GetById:
|
|
|
|
|
method = View.Display;
|
2024-01-08 16:59:30 +01:00
|
|
|
break;
|
2024-01-09 21:38:42 +01:00
|
|
|
case CRUDActions.Create:
|
|
|
|
|
method = Modify.Create;
|
2024-01-08 16:59:30 +01:00
|
|
|
break;
|
2024-01-09 21:38:42 +01:00
|
|
|
case CRUDActions.Update:
|
|
|
|
|
method = Modify.Update;
|
|
|
|
|
break;
|
|
|
|
|
case CRUDActions.Delete:
|
|
|
|
|
method = Modify.Delete;
|
2023-12-13 22:04:13 +01:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
ShowMenu<T>(method);
|
2023-12-13 22:04:13 +01:00
|
|
|
}
|
|
|
|
|
|
2024-01-08 16:59:30 +01:00
|
|
|
public static void TypeSelectorMenu(CRUDActions action)
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-08 16:59:30 +01:00
|
|
|
var menu = new ConsoleMenu();
|
2024-01-09 21:38:42 +01:00
|
|
|
menu.Add("Customer", () => MethodChooser<Customer>(action));
|
|
|
|
|
menu.Add("Employee", () => MethodChooser<Employee>(action));
|
|
|
|
|
menu.Add("Service", () => MethodChooser<Service>(action));
|
|
|
|
|
menu.Add("Maintainer team", () => MethodChooser<MaintainerTeam>(action));
|
2024-01-08 16:59:30 +01:00
|
|
|
menu.Add("Back", ConsoleMenu.Close);
|
|
|
|
|
menu.Show();
|
|
|
|
|
}
|
2023-12-13 22:04:13 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
public static void ShowMenu<T>(CRUDMethod<T> method)
|
2024-01-08 16:59:30 +01:00
|
|
|
{
|
|
|
|
|
var menu = new ConsoleMenu();
|
2023-12-13 22:04:13 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
if (method != Modify.Create && method != View.DisplayAll)
|
2024-01-08 16:59:30 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
foreach (T c in RestService.Get<T>("/api/" + typeof(T).Name + "/"))
|
|
|
|
|
{
|
|
|
|
|
menu.Add($"{c.GetType().GetProperty("NAME").GetValue(c)}: {c.GetType().GetProperty("ID").GetValue(c)}", () => method(c));
|
|
|
|
|
}
|
2024-01-08 16:59:30 +01:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
method(default);
|
2023-12-13 22:04:13 +01:00
|
|
|
}
|
2024-01-08 16:59:30 +01:00
|
|
|
menu.Add("Back", ConsoleMenu.Close);
|
|
|
|
|
menu.Show();
|
|
|
|
|
}
|
2023-12-13 22:04:13 +01:00
|
|
|
}
|
|
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
public class Modify
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
public static void Delete<T>(T c)
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 17:42:10 +01:00
|
|
|
try
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
int key = (int)c.GetType().GetProperty("ID").GetValue(c);
|
2023-12-13 22:04:13 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
RestService.Delete(key, "/api/" + typeof(T).Name + "/");
|
|
|
|
|
Console.WriteLine("Successfully deleted {0} with ID {1}", typeof(T).Name, key);
|
2024-01-09 18:32:56 +01:00
|
|
|
Console.WriteLine("Press any key to continue.");
|
|
|
|
|
Console.ReadKey();
|
2024-01-09 17:42:10 +01:00
|
|
|
}
|
2024-01-09 21:38:42 +01:00
|
|
|
catch (Exception e)
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
Console.WriteLine("The following error occured:");
|
|
|
|
|
Console.WriteLine(e.Message);
|
2024-01-09 18:37:09 +01:00
|
|
|
Console.WriteLine("Press any key to continue.");
|
|
|
|
|
Console.ReadKey();
|
2024-01-09 18:35:33 +01:00
|
|
|
}
|
2024-01-09 17:42:10 +01:00
|
|
|
}
|
2023-12-13 22:04:13 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
public static void Update<T>(T item)
|
2024-01-09 17:42:10 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
View.Display(item);
|
2023-12-13 22:04:13 +01:00
|
|
|
Console.WriteLine("Now you can modify these fields, except for the ID.");
|
|
|
|
|
|
2024-01-09 18:35:33 +01:00
|
|
|
try
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
foreach (PropertyInfo p in item.GetType().GetProperties())
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
if (p.Name != "ID")
|
|
|
|
|
{
|
|
|
|
|
Console.Write(p.Name + " (" + p.PropertyType.Name + "): ");
|
|
|
|
|
string input = Console.ReadLine();
|
|
|
|
|
if (p.PropertyType.Name == "Int32")
|
|
|
|
|
{
|
|
|
|
|
p.SetValue(item, Convert.ToInt32(input));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
p.SetValue(item, input);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-01-09 18:35:33 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
RestService.Post<T>(item, "/api/" + typeof(T).Name + "/");
|
2024-01-09 18:37:09 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
Console.WriteLine("\nSuccessfully updated {0} with ID {1}", typeof(T).Name, item.GetType().GetProperty("ID").GetValue(item));
|
2024-01-09 18:37:09 +01:00
|
|
|
Console.WriteLine("Press any key to continue.");
|
|
|
|
|
Console.ReadKey();
|
2024-01-09 18:35:33 +01:00
|
|
|
}
|
|
|
|
|
catch (FormatException)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Invalid format!");
|
2023-12-13 22:04:13 +01:00
|
|
|
}
|
2024-01-09 17:42:10 +01:00
|
|
|
}
|
2023-12-13 22:04:13 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
public static void Create<T>(T? dummy = default)
|
2024-01-09 17:42:10 +01:00
|
|
|
{
|
2024-01-09 18:35:33 +01:00
|
|
|
try
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
T item = (T)Activator.CreateInstance(typeof(T));
|
2023-12-13 22:04:13 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
Console.WriteLine("Please supply all neccessary fields!");
|
2023-12-13 22:04:13 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
foreach (PropertyInfo p in item.GetType().GetProperties())
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
Console.Write(p.Name + " (" + p.PropertyType.Name + "): ");
|
|
|
|
|
string input = Console.ReadLine();
|
|
|
|
|
if (p.PropertyType.Name == "Int32")
|
|
|
|
|
{
|
|
|
|
|
p.SetValue(item, Convert.ToInt32(input));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
p.SetValue(item, input);
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-01-09 18:35:33 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
RestService.Put<T>(item, "/api/" + typeof(T).Name + "/");
|
2024-01-09 18:37:09 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
Console.WriteLine("\nSuccessfully created {0} with ID {1}", typeof(T).Name, item.GetType().GetProperty("ID").GetValue(item));
|
2024-01-09 18:37:09 +01:00
|
|
|
Console.WriteLine("Press any key to continue.");
|
|
|
|
|
Console.ReadKey();
|
2024-01-09 18:35:33 +01:00
|
|
|
}
|
|
|
|
|
catch (FormatException)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Invalid format!");
|
2023-12-13 22:04:13 +01:00
|
|
|
}
|
2024-01-09 17:42:10 +01:00
|
|
|
}
|
2023-12-13 22:04:13 +01:00
|
|
|
}
|
|
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
internal class View
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
internal static void Display<T>(T c)
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
if (c != null)
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
foreach (PropertyInfo p in c.GetType().GetProperties())
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine(p.Name + ": " + p.GetValue(c));
|
|
|
|
|
}
|
2023-12-13 22:04:13 +01:00
|
|
|
}
|
2024-01-09 21:38:42 +01:00
|
|
|
else
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
Console.WriteLine("No such database entry was found :/");
|
2023-12-13 22:04:13 +01:00
|
|
|
}
|
|
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
Console.WriteLine("\nPress any key to continue.");
|
|
|
|
|
Console.ReadKey();
|
2024-01-08 16:59:30 +01:00
|
|
|
}
|
2023-12-13 22:04:13 +01:00
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
internal static void DisplayAll<T>(T? dummy = default)
|
2024-01-08 16:59:30 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
var items = RestService.Get<T>("/api/" + typeof(T).Name + "/");
|
|
|
|
|
if (items != null)
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
foreach (T item in items)
|
|
|
|
|
{
|
|
|
|
|
foreach (PropertyInfo p in item.GetType().GetProperties())
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine(p.Name + ": " + p.GetValue(item));
|
|
|
|
|
}
|
2024-01-09 22:52:59 +01:00
|
|
|
Console.WriteLine();
|
2024-01-09 21:38:42 +01:00
|
|
|
}
|
2023-12-13 22:04:13 +01:00
|
|
|
}
|
2024-01-09 21:38:42 +01:00
|
|
|
else
|
2023-12-13 22:04:13 +01:00
|
|
|
{
|
2024-01-09 21:38:42 +01:00
|
|
|
Console.WriteLine("No such database entry was found :/");
|
2023-12-13 22:04:13 +01:00
|
|
|
}
|
|
|
|
|
|
2024-01-09 21:38:42 +01:00
|
|
|
Console.WriteLine("\nPress any key to continue.");
|
|
|
|
|
Console.ReadKey();
|
2024-01-08 16:59:30 +01:00
|
|
|
}
|
2023-12-13 22:04:13 +01:00
|
|
|
}
|
|
|
|
|
}
|