Initial commit
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
using System.Text.Json;
|
||||
using RobotNet10.NavigationTune.Shared.Models;
|
||||
using StraightLineScenario = RobotNet10.NavigationTune.Scenarios.StraightLineScenario;
|
||||
using CircleScenario = RobotNet10.NavigationTune.Scenarios.CircleScenario;
|
||||
using CustomPathScenario = RobotNet10.NavigationTune.Scenarios.CustomPathScenario;
|
||||
|
||||
namespace RobotNet10.NavigationTune.Data;
|
||||
|
||||
/// <summary>
|
||||
/// Entity for storing TestScenario in database
|
||||
/// Since TestScenario is abstract, we store config as JSON
|
||||
/// </summary>
|
||||
public class TestScenarioEntity
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public TrajectoryType Type { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public bool IsDefault { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// JSON config for scenario-specific properties
|
||||
/// </summary>
|
||||
public string ConfigJson { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Convert to TestScenario instance
|
||||
/// </summary>
|
||||
public TestScenario ToTestScenario()
|
||||
{
|
||||
return Type switch
|
||||
{
|
||||
TrajectoryType.StraightLine => JsonSerializer.Deserialize<StraightLineScenario>(ConfigJson)
|
||||
?? new StraightLineScenario { Id = Id, Name = Name, Description = Description, Type = Type, CreatedAt = CreatedAt, IsDefault = IsDefault },
|
||||
TrajectoryType.Circle => JsonSerializer.Deserialize<CircleScenario>(ConfigJson)
|
||||
?? new CircleScenario { Id = Id, Name = Name, Description = Description, Type = Type, CreatedAt = CreatedAt, IsDefault = IsDefault },
|
||||
TrajectoryType.Custom => JsonSerializer.Deserialize<CustomPathScenario>(ConfigJson)
|
||||
?? new CustomPathScenario { Id = Id, Name = Name, Description = Description, Type = Type, CreatedAt = CreatedAt, IsDefault = IsDefault },
|
||||
_ => throw new NotSupportedException($"Scenario type {Type} is not supported")
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create from TestScenario
|
||||
/// </summary>
|
||||
public static TestScenarioEntity FromTestScenario(TestScenario scenario)
|
||||
{
|
||||
return new TestScenarioEntity
|
||||
{
|
||||
Id = scenario.Id,
|
||||
Name = scenario.Name,
|
||||
Description = scenario.Description,
|
||||
Type = scenario.Type,
|
||||
CreatedAt = scenario.CreatedAt,
|
||||
IsDefault = scenario.IsDefault,
|
||||
ConfigJson = scenario.Type switch
|
||||
{
|
||||
TrajectoryType.StraightLine => JsonSerializer.Serialize((StraightLineScenario)scenario),
|
||||
TrajectoryType.Circle => JsonSerializer.Serialize((CircleScenario)scenario),
|
||||
TrajectoryType.Custom => JsonSerializer.Serialize((CustomPathScenario)scenario),
|
||||
_ => "{}"
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user