Converting to Async
This commit is contained in:
@@ -9,37 +9,42 @@ public class Logger : ISzLogger
|
|||||||
public string LogFilePath { get; set; }
|
public string LogFilePath { get; set; }
|
||||||
public int LogFileMaxLines { get; set; } = 100;
|
public int LogFileMaxLines { get; set; } = 100;
|
||||||
|
|
||||||
public void Log(string text)
|
public readonly ISzFileManager FileManager;
|
||||||
{
|
|
||||||
Console.WriteLine($"{DateTime.UtcNow} : [SZ LOG] {text}");
|
|
||||||
if (LogToFile) AppendLogFile($"{DateTime.UtcNow} : [SZ LOG] {text}");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void LogError(string text)
|
public Logger(ISzFileManager fileManager)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"{DateTime.UtcNow} : [SZ ERR] {text}");
|
FileManager = fileManager;
|
||||||
if (LogToFile) AppendLogFile($"{DateTime.UtcNow} : [SZ ERR] {text}");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void LogWarning(string text)
|
LogFilePath = Path.Combine(FileManager.DataPath, "log.txt");
|
||||||
{
|
|
||||||
Console.WriteLine($"{DateTime.UtcNow} : [SZ WARN] {text}");
|
|
||||||
if (LogToFile) AppendLogFile($"{DateTime.UtcNow} : [SZ WARN] {text}");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AppendLogFile(string text)
|
|
||||||
{
|
|
||||||
// TODO: Make sure log file adheres to LogFileMaxLines
|
|
||||||
|
|
||||||
if (!File.Exists(LogFilePath))
|
|
||||||
{
|
|
||||||
LogFilePath = Path.Combine(SZ.LocalFileManager.DataPath, "log.txt");
|
|
||||||
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
|
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
|
||||||
{
|
{
|
||||||
LogError($"[EXCEPTION] {eventArgs.Exception}");
|
LogError($"[EXCEPTION] {eventArgs.Exception}");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Log(string text)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"[SZ LOG] {text}");
|
||||||
|
AppendLogFile($"{DateTime.UtcNow} : [SZ LOG] {text}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LogError(string text)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"[SZ ERR] {text}");
|
||||||
|
AppendLogFile($"{DateTime.UtcNow} : [SZ ERR] {text}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LogWarning(string text)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"[SZ WARN] {text}");
|
||||||
|
AppendLogFile($"{DateTime.UtcNow} : [SZ WARN] {text}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AppendLogFile(string text)
|
||||||
|
{
|
||||||
|
// TODO: Make sure log file adheres to LogFileMaxLines
|
||||||
|
if (!LogToFile) return;
|
||||||
File.AppendAllText(LogFilePath, text + "\n");
|
File.AppendAllText(LogFilePath, text + "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using SzCore;
|
using SzCore;
|
||||||
using SzCore.DataObjects;
|
using SzCore.DataObjects;
|
||||||
using SzCore.Defaults;
|
using SzCore.Defaults;
|
||||||
@@ -8,11 +10,12 @@ namespace SzCli;
|
|||||||
public class Program
|
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(FileManager);
|
||||||
private static readonly DefaultDatabaseHandler DbHandler = new();
|
private static readonly DefaultDatabaseHandler DbHandler = new();
|
||||||
|
private static readonly SzEvaluator Evaluator = new();
|
||||||
private static SzDataHandler _dataHandler;
|
private static SzDataHandler _dataHandler;
|
||||||
|
|
||||||
public static void Main(string[] args)
|
public static async Task Main(string[] args)
|
||||||
{
|
{
|
||||||
SZ.Init(FileManager, Logger, DbHandler);
|
SZ.Init(FileManager, Logger, DbHandler);
|
||||||
_dataHandler = SZ.DataHandler;
|
_dataHandler = SZ.DataHandler;
|
||||||
@@ -32,21 +35,21 @@ public class Program
|
|||||||
|
|
||||||
switch (Console.ReadLine())
|
switch (Console.ReadLine())
|
||||||
{
|
{
|
||||||
case "1": HandleCreateTemplate(); break;
|
case "1": await HandleCreateTemplate(); break;
|
||||||
case "2": HandleDeleteTemplate(); break;
|
case "2": await HandleDeleteTemplate(); break;
|
||||||
case "3": HandleCreateDataset(); break;
|
case "3": await HandleCreateDataset(); break;
|
||||||
case "4": HandleDeleteDataset(); break;
|
case "4": await HandleDeleteDataset(); break;
|
||||||
case "5": running = false; break;
|
case "5": running = false; break;
|
||||||
default: Console.WriteLine("Invalid option."); break;
|
default: Console.WriteLine("Invalid option."); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void HandleCreateTemplate()
|
private static async Task HandleCreateTemplate()
|
||||||
{
|
{
|
||||||
Console.Write("Enter Template Name: ");
|
Console.Write("Enter Template Name: ");
|
||||||
string name = Console.ReadLine() ?? "";
|
string name = Console.ReadLine() ?? "";
|
||||||
Console.Write("Enter Data Object Type (e.g., Item, Character): ");
|
Console.Write("Enter Data Object Type: ");
|
||||||
string type = Console.ReadLine() ?? "";
|
string type = Console.ReadLine() ?? "";
|
||||||
|
|
||||||
var fields = new List<SzTemplateField>();
|
var fields = new List<SzTemplateField>();
|
||||||
@@ -59,7 +62,6 @@ public class Program
|
|||||||
Console.Write(" Field ID: ");
|
Console.Write(" Field ID: ");
|
||||||
string fId = Console.ReadLine() ?? "";
|
string fId = Console.ReadLine() ?? "";
|
||||||
|
|
||||||
// Display Enum Options
|
|
||||||
Console.WriteLine(" Select Field Type:");
|
Console.WriteLine(" Select Field Type:");
|
||||||
var types = Enum.GetValues<SzFieldType>();
|
var types = Enum.GetValues<SzFieldType>();
|
||||||
for (int i = 0; i < types.Length; i++)
|
for (int i = 0; i < types.Length; i++)
|
||||||
@@ -70,63 +72,54 @@ public class Program
|
|||||||
Console.Write(" Enter number: ");
|
Console.Write(" Enter number: ");
|
||||||
if (!int.TryParse(Console.ReadLine(), out int choice) || choice < 0 || choice >= types.Length)
|
if (!int.TryParse(Console.ReadLine(), out int choice) || choice < 0 || choice >= types.Length)
|
||||||
{
|
{
|
||||||
Console.WriteLine(" Invalid selection. Defaulting to Text.");
|
choice = 0;
|
||||||
choice = 0; // Default to Text
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SzFieldType selectedType = types[choice];
|
var fieldResult = _dataHandler.CreateTemplateField(fId, types[choice]);
|
||||||
|
|
||||||
var fieldResult = _dataHandler.CreateTemplateField(fId, selectedType);
|
|
||||||
if (fieldResult.IsSuccess)
|
if (fieldResult.IsSuccess)
|
||||||
{
|
{
|
||||||
fields.Add(fieldResult.Value);
|
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);
|
var result = _dataHandler.CreateDataObjectTemplate(name, type, fields: fields);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
_dataHandler.SaveTemplate(result.Value);
|
await _dataHandler.SaveTemplateAsync(result.Value);
|
||||||
Console.WriteLine($"\nTemplate '{result.Value.Id}' saved successfully!");
|
Console.WriteLine($"\nTemplate '{result.Value.Id}' saved!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void HandleDeleteTemplate()
|
private static async Task HandleDeleteTemplate()
|
||||||
{
|
{
|
||||||
Console.Write("Enter Template ID to delete: ");
|
Console.Write("Enter Template ID to delete: ");
|
||||||
string id = Console.ReadLine() ?? "";
|
string id = Console.ReadLine() ?? "";
|
||||||
var result = _dataHandler.DeleteTemplate(id);
|
var result = await _dataHandler.DeleteTemplateAsync(id);
|
||||||
Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}");
|
Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void HandleCreateDataset()
|
private static async Task HandleCreateDataset()
|
||||||
{
|
{
|
||||||
Console.Write("Enter Dataset Name: ");
|
Console.Write("Enter Dataset Name: ");
|
||||||
string name = Console.ReadLine() ?? "";
|
string name = Console.ReadLine() ?? "";
|
||||||
Console.Write("Enter Template ID to use: ");
|
Console.Write("Enter Template ID to use: ");
|
||||||
string tId = Console.ReadLine() ?? "";
|
string tId = Console.ReadLine() ?? "";
|
||||||
|
|
||||||
var templateResult = _dataHandler.LoadTemplate<SzDataObjectTemplate>(tId);
|
var templateResult = await _dataHandler.LoadTemplateAsync<SzDataObjectTemplate>(tId);
|
||||||
if (!templateResult.IsSuccess)
|
if (!templateResult.IsSuccess)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Error: {templateResult.Error}");
|
Console.WriteLine($"Error: {templateResult.Error}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var datasetResult = _dataHandler.CreateDataset(name, tId);
|
var datasetResult = await _dataHandler.CreateDatasetAsync(name, tId);
|
||||||
if (!datasetResult.IsSuccess) return;
|
if (!datasetResult.IsSuccess) return;
|
||||||
|
|
||||||
var dataset = datasetResult.Value;
|
var dataset = datasetResult.Value;
|
||||||
bool addingObjects = true;
|
|
||||||
|
|
||||||
while (addingObjects)
|
while (true)
|
||||||
{
|
{
|
||||||
Console.Write("Add a DataObject to this dataset? (y/n): ");
|
Console.Write("Add a DataObject? (y/n): ");
|
||||||
if (Console.ReadLine()?.ToLower() != "y") break;
|
if (Console.ReadLine()?.ToLower() != "y") break;
|
||||||
|
|
||||||
Console.Write(" Object Name: ");
|
Console.Write(" Object Name: ");
|
||||||
@@ -137,24 +130,33 @@ public class Program
|
|||||||
{
|
{
|
||||||
foreach (var field in objResult.Value.Fields.Values)
|
foreach (var field in objResult.Value.Fields.Values)
|
||||||
{
|
{
|
||||||
Console.Write($" Value for {field.Id}: ");
|
Console.Write($" Value for {field.Id} ({field.FieldType}): ");
|
||||||
field.Value = Console.ReadLine() ?? "";
|
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);
|
dataset.DataObjects.Add(objResult.Value.Id, objResult.Value);
|
||||||
Console.WriteLine(" Object added to dataset draft.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_dataHandler.SaveDataset(dataset);
|
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!");
|
Console.WriteLine("Dataset saved!");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void HandleDeleteDataset()
|
private static async Task HandleDeleteDataset()
|
||||||
{
|
{
|
||||||
Console.Write("Enter Dataset ID to delete: ");
|
Console.Write("Enter Dataset ID to delete: ");
|
||||||
string id = Console.ReadLine() ?? "";
|
string id = Console.ReadLine() ?? "";
|
||||||
var result = _dataHandler.DeleteDataset(id);
|
var result = await _dataHandler.DeleteDatasetAsync(id);
|
||||||
Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}");
|
Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,64 +5,64 @@ namespace SzCli;
|
|||||||
|
|
||||||
public static class Test
|
public static class Test
|
||||||
{
|
{
|
||||||
public static void CreateTestData()
|
// public static void CreateTestData()
|
||||||
{
|
// {
|
||||||
|
|
||||||
SZ.Logger.Log(" -- CreateTestData Test --");
|
// SZ.Logger.Log(" -- CreateTestData Test --");
|
||||||
|
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
var dt = new SzDataObjectTemplate(){
|
// var dt = new SzDataObjectTemplate(){
|
||||||
Name = "SzCore - Basic Item",
|
// Name = "SzCore - Basic Item",
|
||||||
Id = "szcore-item-basic",
|
// Id = "szcore-item-basic",
|
||||||
DataObjectType = "item",
|
// DataObjectType = "item",
|
||||||
Uuid = Guid.NewGuid()
|
// Uuid = Guid.NewGuid()
|
||||||
};
|
// };
|
||||||
|
|
||||||
var testTemplateField = new SzTemplateField()
|
// var testTemplateField = new SzTemplateField()
|
||||||
{
|
// {
|
||||||
Id = "cost",
|
// Id = "cost",
|
||||||
FieldType = SzFieldType.Number,
|
// FieldType = SzFieldType.Number,
|
||||||
DefaultValue = "20"
|
// DefaultValue = "20"
|
||||||
};
|
// };
|
||||||
|
|
||||||
dt.TemplateFields.Add(testTemplateField.Id, testTemplateField);
|
// dt.TemplateFields.Add(testTemplateField.Id, testTemplateField);
|
||||||
|
|
||||||
SZ.DataHandler.SaveTemplate(dt);
|
// SZ.DataHandler.SaveTemplate(dt);
|
||||||
|
|
||||||
var ds = new SzDataset()
|
// var ds = new SzDataset()
|
||||||
{
|
// {
|
||||||
Name = "TestDataset",
|
// Name = "TestDataset",
|
||||||
Id = "test-dataset",
|
// Id = "test-dataset",
|
||||||
DataObjectTemplateId = dt.Id,
|
// DataObjectTemplateId = dt.Id,
|
||||||
DataObjectTemplateUuid = dt.Uuid,
|
// DataObjectTemplateUuid = dt.Uuid,
|
||||||
DataObjectType = "item",
|
// DataObjectType = "item",
|
||||||
Uuid = Guid.NewGuid(),
|
// Uuid = Guid.NewGuid(),
|
||||||
};
|
// };
|
||||||
|
|
||||||
var testDataObject = new SzDataObject()
|
// var testDataObject = new SzDataObject()
|
||||||
{
|
// {
|
||||||
Name = "TestObject",
|
// Name = "TestObject",
|
||||||
Id = "test",
|
// Id = "test",
|
||||||
};
|
// };
|
||||||
|
|
||||||
var testField = new SzField()
|
// var testField = new SzField()
|
||||||
{
|
// {
|
||||||
Id = "cost",
|
// Id = "cost",
|
||||||
FieldType = SzFieldType.Number,
|
// FieldType = SzFieldType.Number,
|
||||||
Value = "200"
|
// Value = "200"
|
||||||
};
|
// };
|
||||||
|
|
||||||
testDataObject.Fields.Add(testField.Id, testField);
|
// testDataObject.Fields.Add(testField.Id, testField);
|
||||||
ds.DataObjects.Add(testDataObject.Id, testDataObject);
|
// ds.DataObjects.Add(testDataObject.Id, testDataObject);
|
||||||
|
|
||||||
SZ.DataHandler.SaveDataset(ds);
|
// SZ.DataHandler.SaveDataset(ds);
|
||||||
}
|
// }
|
||||||
catch (Exception e)
|
// catch (Exception e)
|
||||||
{
|
// {
|
||||||
SZ.Logger.LogError($"CreateTestData test failed: {e}");
|
// SZ.Logger.LogError($"CreateTestData test failed: {e}");
|
||||||
}
|
// }
|
||||||
|
|
||||||
SZ.Logger.Log(" -- CreateTestData Test: Success --");
|
// SZ.Logger.Log(" -- CreateTestData Test: Success --");
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,27 +7,13 @@ public class DefaultDatabaseHandler : ISzDatabaseHandler
|
|||||||
public bool InternetAllowed { get; set; } = true;
|
public bool InternetAllowed { get; set; } = true;
|
||||||
public Dictionary<string, string> SzDbUrls { get; set; } = [];
|
public Dictionary<string, string> SzDbUrls { get; set; } = [];
|
||||||
|
|
||||||
public SzDataset? TryRetrieveDataset(Guid uuid)
|
public Task<SzDataset?> TryRetrieveDatasetAsync(Guid uuid, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
SZ.Logger.LogWarning("The default database helper is not implemented yet");
|
throw new NotImplementedException();
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<SzDataset?> TryRetrieveDatasetAsync(Guid uuid)
|
public Task<ISzTemplate?> TryRetrieveTemplateAsync(Guid uuid, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
SZ.Logger.LogWarning("The default database helper is not implemented yet");
|
throw new NotImplementedException();
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ISzTemplate? TryRetrieveTemplate(Guid uuid)
|
|
||||||
{
|
|
||||||
SZ.Logger.LogWarning("The default database helper is not implemented yet");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task<ISzTemplate?> TryRetrieveTemplateAsync(Guid uuid)
|
|
||||||
{
|
|
||||||
SZ.Logger.LogWarning("The default database helper is not implemented yet");
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,13 +9,13 @@ public class SzDataHandler
|
|||||||
|
|
||||||
public SzDataHandler() { }
|
public SzDataHandler() { }
|
||||||
|
|
||||||
private void ClearCache()
|
public void ClearCache()
|
||||||
{
|
{
|
||||||
_loadedDatasets.Clear();
|
_loadedDatasets.Clear();
|
||||||
_loadedTemplates.Clear();
|
_loadedTemplates.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Datasets (Async)
|
#region Datasets
|
||||||
public async Task<SzResult<bool>> SaveDatasetAsync(SzDataset dataset, CancellationToken ct = default)
|
public async Task<SzResult<bool>> SaveDatasetAsync(SzDataset dataset, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
var datasetPath = Path.Combine(SZ.LocalFileManager.DatasetsPath, dataset.Id, "dataset.json");
|
var datasetPath = Path.Combine(SZ.LocalFileManager.DatasetsPath, dataset.Id, "dataset.json");
|
||||||
@@ -90,7 +90,7 @@ public class SzDataHandler
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Templates (Async)
|
#region Templates
|
||||||
public async Task<SzResult<bool>> SaveTemplateAsync(ISzTemplate template, CancellationToken ct = default)
|
public async Task<SzResult<bool>> SaveTemplateAsync(ISzTemplate template, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
var templatePath = Path.Combine(SZ.LocalFileManager.TemplatesPath, template.Id, "template.json");
|
var templatePath = Path.Combine(SZ.LocalFileManager.TemplatesPath, template.Id, "template.json");
|
||||||
@@ -122,10 +122,41 @@ public class SzDataHandler
|
|||||||
_loadedTemplates.TryAdd(parsed.Id, parsed);
|
_loadedTemplates.TryAdd(parsed.Id, parsed);
|
||||||
return SzResult<T>.Success(parsed);
|
return SzResult<T>.Success(parsed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<SzResult<bool>> DeleteTemplateAsync(string templateId)
|
||||||
|
{
|
||||||
|
return await Task.Run(() => {
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var path = Path.Combine(SZ.LocalFileManager.TemplatesPath, templateId);
|
||||||
|
if (Directory.Exists(path)) Directory.Delete(path, true);
|
||||||
|
_loadedTemplates.Remove(templateId);
|
||||||
|
return SzResult<bool>.Success(true);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
return SzResult<bool>.Failure(e.Message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Synchronous Logic
|
#region Synchronous Creation Logic
|
||||||
// These remain synchronous because they are purely in-memory operations.
|
public SzResult<SzTemplateField> CreateTemplateField(string id, SzFieldType fieldType, bool isList = false, string? defaultValue = null, bool isSpecialType = false, string? specialTypeValue = null)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(id)) return SzResult<SzTemplateField>.Failure("ID cannot be empty.");
|
||||||
|
|
||||||
|
return SzResult<SzTemplateField>.Success(new SzTemplateField()
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
FieldType = fieldType,
|
||||||
|
IsList = isList,
|
||||||
|
IsSpecialType = isSpecialType,
|
||||||
|
DefaultValue = defaultValue ?? "",
|
||||||
|
SpecialTypeValue = specialTypeValue ?? ""
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public SzResult<SzDataObjectTemplate> CreateDataObjectTemplate(string name, string dataObjectType, string? id = null, string? description = null, List<SzTemplateField>? fields = null)
|
public SzResult<SzDataObjectTemplate> CreateDataObjectTemplate(string name, string dataObjectType, string? id = null, string? description = null, List<SzTemplateField>? fields = null)
|
||||||
{
|
{
|
||||||
var newTemplate = new SzDataObjectTemplate()
|
var newTemplate = new SzDataObjectTemplate()
|
||||||
|
|||||||
Reference in New Issue
Block a user