162 lines
5.5 KiB
C#
162 lines
5.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using SzCore;
|
|
using SzCore.DataObjects;
|
|
using SzCore.Defaults;
|
|
|
|
namespace SzCli;
|
|
|
|
public class Program
|
|
{
|
|
private static readonly DefaultLocalFileManager FileManager = new();
|
|
private static readonly Logger Logger = new(FileManager);
|
|
private static readonly DefaultDatabaseHandler DbHandler = new();
|
|
private static readonly SzEvaluator Evaluator = new();
|
|
private static SzDataHandler _dataHandler;
|
|
|
|
public static async Task Main(string[] args)
|
|
{
|
|
SZ.Init(FileManager, Logger, DbHandler);
|
|
_dataHandler = SZ.DataHandler;
|
|
|
|
Logger.Log("// -- SZ CLI -- //");
|
|
|
|
bool running = true;
|
|
while (running)
|
|
{
|
|
Console.WriteLine("\n--- Main Menu ---");
|
|
Console.WriteLine("1. Create Data Object Template");
|
|
Console.WriteLine("2. Delete Template");
|
|
Console.WriteLine("3. Create Dataset");
|
|
Console.WriteLine("4. Delete Dataset");
|
|
Console.WriteLine("5. Exit");
|
|
Console.Write("\nSelect an option: ");
|
|
|
|
switch (Console.ReadLine())
|
|
{
|
|
case "1": await HandleCreateTemplate(); break;
|
|
case "2": await HandleDeleteTemplate(); break;
|
|
case "3": await HandleCreateDataset(); break;
|
|
case "4": await HandleDeleteDataset(); break;
|
|
case "5": running = false; break;
|
|
default: Console.WriteLine("Invalid option."); break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static async Task HandleCreateTemplate()
|
|
{
|
|
Console.Write("Enter Template Name: ");
|
|
string name = Console.ReadLine() ?? "";
|
|
Console.Write("Enter Data Object Type: ");
|
|
string type = Console.ReadLine() ?? "";
|
|
|
|
var fields = new List<SzTemplateField>();
|
|
|
|
while (true)
|
|
{
|
|
Console.Write("\nAdd a field? (y/n): ");
|
|
if (Console.ReadLine()?.ToLower() != "y") break;
|
|
|
|
Console.Write(" Field ID: ");
|
|
string fId = Console.ReadLine() ?? "";
|
|
|
|
Console.WriteLine(" Select Field Type:");
|
|
var types = Enum.GetValues<SzFieldType>();
|
|
for (int i = 0; i < types.Length; i++)
|
|
{
|
|
Console.WriteLine($" {i}. {types[i]}");
|
|
}
|
|
|
|
Console.Write(" Enter number: ");
|
|
if (!int.TryParse(Console.ReadLine(), out int choice) || choice < 0 || choice >= types.Length)
|
|
{
|
|
choice = 0;
|
|
}
|
|
|
|
var fieldResult = _dataHandler.CreateTemplateField(fId, types[choice]);
|
|
if (fieldResult.IsSuccess)
|
|
{
|
|
fields.Add(fieldResult.Value);
|
|
}
|
|
}
|
|
|
|
var result = _dataHandler.CreateDataObjectTemplate(name, type, fields: fields);
|
|
if (result.IsSuccess)
|
|
{
|
|
await _dataHandler.SaveTemplateAsync(result.Value);
|
|
Console.WriteLine($"\nTemplate '{result.Value.Id}' saved!");
|
|
}
|
|
}
|
|
|
|
private static async Task HandleDeleteTemplate()
|
|
{
|
|
Console.Write("Enter Template ID to delete: ");
|
|
string id = Console.ReadLine() ?? "";
|
|
var result = await _dataHandler.DeleteTemplateAsync(id);
|
|
Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}");
|
|
}
|
|
|
|
private static async Task HandleCreateDataset()
|
|
{
|
|
Console.Write("Enter Dataset Name: ");
|
|
string name = Console.ReadLine() ?? "";
|
|
Console.Write("Enter Template ID to use: ");
|
|
string tId = Console.ReadLine() ?? "";
|
|
|
|
var templateResult = await _dataHandler.LoadTemplateAsync<SzDataObjectTemplate>(tId);
|
|
if (!templateResult.IsSuccess)
|
|
{
|
|
Console.WriteLine($"Error: {templateResult.Error}");
|
|
return;
|
|
}
|
|
|
|
var datasetResult = await _dataHandler.CreateDatasetAsync(name, tId);
|
|
if (!datasetResult.IsSuccess) return;
|
|
|
|
var dataset = datasetResult.Value;
|
|
|
|
while (true)
|
|
{
|
|
Console.Write("Add a DataObject? (y/n): ");
|
|
if (Console.ReadLine()?.ToLower() != "y") break;
|
|
|
|
Console.Write(" Object Name: ");
|
|
string objName = Console.ReadLine() ?? "";
|
|
|
|
var objResult = _dataHandler.CreateDataObject(templateResult.Value, objName);
|
|
if (objResult.IsSuccess)
|
|
{
|
|
foreach (var field in objResult.Value.Fields.Values)
|
|
{
|
|
Console.Write($" Value for {field.Id} ({field.FieldType}): ");
|
|
field.Value = Console.ReadLine() ?? "";
|
|
}
|
|
dataset.DataObjects.Add(objResult.Value.Id, objResult.Value);
|
|
}
|
|
}
|
|
|
|
Console.WriteLine("\nValidating dataset...");
|
|
var evalResult = await Evaluator.EvaluateDatasetAsync(dataset);
|
|
|
|
if (!evalResult.IsSuccess)
|
|
{
|
|
Console.WriteLine("Validation Failed:");
|
|
Console.WriteLine(evalResult.Error);
|
|
Console.Write("Save anyway? (y/n): ");
|
|
if (Console.ReadLine()?.ToLower() != "y") return;
|
|
}
|
|
|
|
await _dataHandler.SaveDatasetAsync(dataset);
|
|
Console.WriteLine("Dataset saved!");
|
|
}
|
|
|
|
private static async Task HandleDeleteDataset()
|
|
{
|
|
Console.Write("Enter Dataset ID to delete: ");
|
|
string id = Console.ReadLine() ?? "";
|
|
var result = await _dataHandler.DeleteDatasetAsync(id);
|
|
Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}");
|
|
}
|
|
} |