Files
I150/srcs/RobotNet10/Commons/RobotNet10.NavigationTune/Data/TestScenarioEntity.cs
2026-07-03 16:37:12 +07:00

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),
_ => "{}"
}
};
}
}