mirror of
https://git.battle-of-pip.de/root/vpr-mitarbeiterverwaltung.git
synced 2025-06-21 00:03:18 +02:00
151 lines
5.6 KiB
C#
151 lines
5.6 KiB
C#
using System.Text.Json;
|
|
using DX86;
|
|
using DX86.Modules;
|
|
using Library;
|
|
|
|
namespace Server;
|
|
|
|
class Program
|
|
{
|
|
public static MessageSender messageSender;
|
|
public static MessageBox messageBox;
|
|
public static InputBox inputBox;
|
|
public static ItemSelector itemSelector;
|
|
public static MySQL mySql;
|
|
private static List<TcpServer> servers;
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
Console.WriteLine("Initializing server...");
|
|
// Initialize UI and logging components
|
|
messageSender = new MessageSender("log.txt");
|
|
messageBox = new MessageBox(messageSender);
|
|
inputBox = new InputBox(messageSender);
|
|
itemSelector = new ItemSelector(messageSender);
|
|
servers = new List<TcpServer>();
|
|
|
|
// 1) Load existing DB config or prompt user + initialize
|
|
mySql = LoadOrInitDatabase();
|
|
|
|
// 2) Start the rest of your server loop
|
|
ServerLoop();
|
|
}
|
|
|
|
private static MySQL LoadOrInitDatabase()
|
|
{
|
|
var cfg = DbConfig.Load();
|
|
if (cfg != null)
|
|
{
|
|
messageSender.Log("[Program] Loaded existing database configuration.");
|
|
// Use existing credentials to connect (including cfg.Port)
|
|
return new MySQL(cfg.Username, cfg.Password, cfg.Server, cfg.Port, cfg.Database, messageSender);
|
|
}
|
|
else
|
|
{
|
|
messageSender.Warn("[Program] No existing DB configuration found. Starting init…");
|
|
|
|
// REPLACE THE FOUR PROMPTS WITH YOUR FIVE ShowAsync(...) CALLS:
|
|
string username = inputBox.ShowAsync("MySQL Configuration [1/5]", ["Username for MySQL Connections"]);
|
|
string password = inputBox.ShowAsync("MySQL Configuration [2/5]", ["Password for MySQL Connections"]);
|
|
string server = inputBox.ShowAsync("MySQL Configuration [3/5]", ["Server Address for MySQL Connections"]);
|
|
string port = inputBox.ShowAsync("MySQL Configuration [4/5]", ["Port for MySQL Connections"]);
|
|
string database = inputBox.ShowAsync("MySQL Configuration [5/5]", ["Database Name for Database Connections"]);
|
|
|
|
return InitializeDatabase(username, password, server, port, database);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates a new MySQL connection, runs the CREATE TABLE DDL,
|
|
/// saves credentials in config.json, and returns the MySQL instance.
|
|
/// </summary>
|
|
private static MySQL InitializeDatabase(
|
|
string username,
|
|
string password,
|
|
string server,
|
|
string port,
|
|
string database
|
|
)
|
|
{
|
|
// 1) Instantiate MySQL (will exit on failure)
|
|
var db = new MySQL(username, password, server, port, database, messageSender);
|
|
|
|
// 2) Create the 'employees' table if it does not exist:
|
|
string createEmployeesTable = @"
|
|
CREATE TABLE IF NOT EXISTS `employees` (
|
|
`Id` VARCHAR(36) NOT NULL PRIMARY KEY,
|
|
`Code` VARCHAR(50) NOT NULL,
|
|
`Surname` VARCHAR(100) NOT NULL,
|
|
`Forename` VARCHAR(100) NOT NULL,
|
|
`Email` VARCHAR(150) NOT NULL,
|
|
`Phone` VARCHAR(50),
|
|
`Street` VARCHAR(200),
|
|
`City` VARCHAR(100),
|
|
`Postcode` VARCHAR(20),
|
|
`Country` VARCHAR(100),
|
|
`Department` VARCHAR(100),
|
|
`Position` VARCHAR(100),
|
|
`EmployeeState` INT NOT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
";
|
|
|
|
messageSender.Log("[Program] Creating 'employees' table if not present…");
|
|
var resultJson = db.ExecuteNonQuery(createEmployeesTable);
|
|
|
|
// Parse resultJson safely using JsonDocument
|
|
try
|
|
{
|
|
using var doc = JsonDocument.Parse(resultJson);
|
|
var root = doc.RootElement;
|
|
|
|
// Expecting { "error": bool, "data": ... }
|
|
bool isError = root.GetProperty("error").GetBoolean();
|
|
if (isError)
|
|
{
|
|
// You can inspect root.GetProperty("data").GetString() if needed
|
|
messageSender.Error("[Program] Failed to create 'employees' table: " + resultJson);
|
|
Environment.Exit(1);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// If something went wrong parsing JSON, treat it as a fatal error
|
|
messageSender.Error($"[Program] Could not parse CREATE TABLE response: {ex.Message}");
|
|
messageSender.Error("[Program] Raw response: " + resultJson);
|
|
Environment.Exit(1);
|
|
}
|
|
|
|
messageSender.Log("[Program] 'employees' table is ready.");
|
|
|
|
// TODO: repeat db.ExecuteNonQuery(...) for any other tables you need
|
|
|
|
// 3) Save the new credentials (including port) into config.json:
|
|
var newCfg = new DbConfig
|
|
{
|
|
Username = username,
|
|
Password = password,
|
|
Server = server,
|
|
Port = port,
|
|
Database = database
|
|
};
|
|
newCfg.Save();
|
|
messageSender.Log("[Program] Saved DB configuration to config.json.");
|
|
|
|
return db;
|
|
}
|
|
|
|
private static void ServerLoop()
|
|
{
|
|
bool running = true;
|
|
string[] menuItems;
|
|
string selectedItem;
|
|
servers.Add(new BackendServer("0.0.0.0", 3767, messageSender));
|
|
// Main server loop
|
|
while (running)
|
|
{
|
|
menuItems = new[] { "Benutzerverwaltung", "Einstellungen", "Beenden" };
|
|
itemSelector.SetTitle("Hauptmenü");
|
|
//selectedItem = itemSelector.SelectItemFromList(menuItems);
|
|
}
|
|
}
|
|
} |