Finish DataHandler for DataObjectTemplates and Datasets.
Also added stuff to SzCli main program for testing
This commit is contained in:
146
SzCli/Program.cs
146
SzCli/Program.cs
@@ -10,9 +10,151 @@ public class Program
|
|||||||
private static readonly DefaultLocalFileManager FileManager = new();
|
private static readonly DefaultLocalFileManager FileManager = new();
|
||||||
private static readonly Logger Logger = new();
|
private static readonly Logger Logger = new();
|
||||||
private static readonly DefaultDatabaseHandler DbHandler = new();
|
private static readonly DefaultDatabaseHandler DbHandler = new();
|
||||||
|
private static SzDataHandler _dataHandler;
|
||||||
|
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
SZ.Init(FileManager, Logger, DbHandler);
|
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": HandleCreateTemplate(); break;
|
||||||
|
case "2": HandleDeleteTemplate(); break;
|
||||||
|
case "3": HandleCreateDataset(); break;
|
||||||
|
case "4": HandleDeleteDataset(); break;
|
||||||
|
case "5": running = false; break;
|
||||||
|
default: Console.WriteLine("Invalid option."); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private static void HandleCreateTemplate()
|
||||||
|
{
|
||||||
|
Console.Write("Enter Template Name: ");
|
||||||
|
string name = Console.ReadLine() ?? "";
|
||||||
|
Console.Write("Enter Data Object Type (e.g., Item, Character): ");
|
||||||
|
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() ?? "";
|
||||||
|
|
||||||
|
// Display Enum Options
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
Console.WriteLine(" Invalid selection. Defaulting to Text.");
|
||||||
|
choice = 0; // Default to Text
|
||||||
|
}
|
||||||
|
|
||||||
|
SzFieldType selectedType = types[choice];
|
||||||
|
|
||||||
|
var fieldResult = _dataHandler.CreateTemplateField(fId, selectedType);
|
||||||
|
if (fieldResult.IsSuccess)
|
||||||
|
{
|
||||||
|
fields.Add(fieldResult.Value);
|
||||||
|
Console.WriteLine($" Added {selectedType} field: {fId}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($" Error creating field: {fieldResult.Error}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = _dataHandler.CreateDataObjectTemplate(name, type, fields: fields);
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
_dataHandler.SaveTemplate(result.Value);
|
||||||
|
Console.WriteLine($"\nTemplate '{result.Value.Id}' saved successfully!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void HandleDeleteTemplate()
|
||||||
|
{
|
||||||
|
Console.Write("Enter Template ID to delete: ");
|
||||||
|
string id = Console.ReadLine() ?? "";
|
||||||
|
var result = _dataHandler.DeleteTemplate(id);
|
||||||
|
Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void HandleCreateDataset()
|
||||||
|
{
|
||||||
|
Console.Write("Enter Dataset Name: ");
|
||||||
|
string name = Console.ReadLine() ?? "";
|
||||||
|
Console.Write("Enter Template ID to use: ");
|
||||||
|
string tId = Console.ReadLine() ?? "";
|
||||||
|
|
||||||
|
var templateResult = _dataHandler.LoadTemplate<SzDataObjectTemplate>(tId);
|
||||||
|
if (!templateResult.IsSuccess)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error: {templateResult.Error}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var datasetResult = _dataHandler.CreateDataset(name, tId);
|
||||||
|
if (!datasetResult.IsSuccess) return;
|
||||||
|
|
||||||
|
var dataset = datasetResult.Value;
|
||||||
|
bool addingObjects = true;
|
||||||
|
|
||||||
|
while (addingObjects)
|
||||||
|
{
|
||||||
|
Console.Write("Add a DataObject to this dataset? (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.Value = Console.ReadLine() ?? "";
|
||||||
|
}
|
||||||
|
// Assume SzDataset has a way to hold these objects in your actual implementation
|
||||||
|
dataset.DataObjects.Add(objResult.Value.Id, objResult.Value);
|
||||||
|
Console.WriteLine(" Object added to dataset draft.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_dataHandler.SaveDataset(dataset);
|
||||||
|
Console.WriteLine("Dataset saved!");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void HandleDeleteDataset()
|
||||||
|
{
|
||||||
|
Console.Write("Enter Dataset ID to delete: ");
|
||||||
|
string id = Console.ReadLine() ?? "";
|
||||||
|
var result = _dataHandler.DeleteDataset(id);
|
||||||
|
Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -91,6 +91,8 @@ public class SzDataHandler
|
|||||||
DataObjectType = templateResult.Value.DataObjectType,
|
DataObjectType = templateResult.Value.DataObjectType,
|
||||||
Uuid = Guid.NewGuid()
|
Uuid = Guid.NewGuid()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return SzResult<SzDataset>.Success(newDataset);
|
return SzResult<SzDataset>.Success(newDataset);
|
||||||
}
|
}
|
||||||
@@ -196,14 +198,53 @@ public class SzDataHandler
|
|||||||
return SzResult<SzTemplateField>.Success(newField);
|
return SzResult<SzTemplateField>.Success(newField);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SzResult<List<SzField>> CreateFields(ISzTemplate template)
|
public SzResult<SzField> CreateField(string id, SzFieldType fieldType, bool isList = false, string? value = null)
|
||||||
{
|
{
|
||||||
return SzResult<List<SzField>>.Failure("Not implemented");
|
if (string.IsNullOrEmpty(id))
|
||||||
|
return SzResult<SzField>.Failure("Could not create field, the id parameter was empty");
|
||||||
|
|
||||||
|
var newField = new SzField()
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
FieldType = fieldType,
|
||||||
|
IsList = isList,
|
||||||
|
Value = value ?? ""
|
||||||
|
};
|
||||||
|
|
||||||
|
return SzResult<SzField>.Success(newField);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SzResult<SzDataObject> CreateDataObject()
|
public SzResult<Dictionary<string, SzField>> CreateFieldsFromTemplate(ISzTemplate template)
|
||||||
{
|
{
|
||||||
return SzResult<SzDataObject>.Failure("Not implemented");
|
var fields = new Dictionary<string, SzField>();
|
||||||
|
foreach (var tempField in template.TemplateFields.Values)
|
||||||
|
{
|
||||||
|
var newField = CreateField(tempField.Id, tempField.FieldType, tempField.IsList);
|
||||||
|
if (!newField.IsSuccess || newField.Value is null)
|
||||||
|
return SzResult<Dictionary<string, SzField>>.Failure($"Could not create field: {newField.Error}");
|
||||||
|
fields.Add(newField.Value.Id, newField.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return SzResult<Dictionary<string, SzField>>.Success(fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SzResult<SzDataObject> CreateDataObject(SzDataObjectTemplate template, string name, string? id = null)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(name))
|
||||||
|
return SzResult<SzDataObject>.Failure("Could not create object, name was empty");
|
||||||
|
|
||||||
|
var dataObject = new SzDataObject()
|
||||||
|
{
|
||||||
|
Name = name,
|
||||||
|
Id = id ?? name.ToLower().Replace(" ", "-").Trim()
|
||||||
|
};
|
||||||
|
|
||||||
|
var createFieldsResult = CreateFieldsFromTemplate(template);
|
||||||
|
if (!createFieldsResult.IsSuccess || createFieldsResult.Value is null)
|
||||||
|
return SzResult<SzDataObject>.Failure($"Could not create data object's fields: {createFieldsResult.Error}");
|
||||||
|
dataObject.Fields = createFieldsResult.Value;
|
||||||
|
|
||||||
|
return SzResult<SzDataObject>.Success(dataObject);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user