67 lines
2.8 KiB
C#
67 lines
2.8 KiB
C#
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),
|
|
_ => "{}"
|
|
}
|
|
};
|
|
}
|
|
}
|