Initial commit
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
namespace RobotNet10.NavigationTune.Shared.Models;
|
||||
|
||||
/// <summary>
|
||||
/// Test run execution record
|
||||
/// </summary>
|
||||
public class TestRun
|
||||
{
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
public Guid ScenarioId { get; set; }
|
||||
public Guid ParameterSetId { get; set; }
|
||||
public DateTime StartTime { get; set; }
|
||||
public DateTime? EndTime { get; set; }
|
||||
public TestStatus Status { get; set; }
|
||||
public double Duration { get; set; } // seconds
|
||||
public string? Notes { get; set; }
|
||||
public string? ErrorMessage { get; set; }
|
||||
|
||||
// Navigation properties
|
||||
public TestScenario? Scenario { get; set; }
|
||||
public NavigationParameterSet? ParameterSet { get; set; }
|
||||
public TestMetrics? Metrics { get; set; }
|
||||
public List<SafetyViolation> SafetyViolations { get; set; } = new();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// DTO for TestRun API responses. Use this to avoid deserializing abstract TestScenario on the client.
|
||||
/// </summary>
|
||||
public class TestRunDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid ScenarioId { get; set; }
|
||||
public string ScenarioName { get; set; } = string.Empty;
|
||||
public Guid ParameterSetId { get; set; }
|
||||
public string ParameterSetName { get; set; } = string.Empty;
|
||||
public DateTime StartTime { get; set; }
|
||||
public DateTime? EndTime { get; set; }
|
||||
public TestStatus Status { get; set; }
|
||||
public double Duration { get; set; }
|
||||
public string? Notes { get; set; }
|
||||
public string? ErrorMessage { get; set; }
|
||||
public TestMetrics? Metrics { get; set; }
|
||||
public List<SafetyViolation> SafetyViolations { get; set; } = new();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Request body for delete-batch API
|
||||
/// </summary>
|
||||
public class DeleteBatchRequest
|
||||
{
|
||||
public List<Guid> Ids { get; set; } = new();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test execution status
|
||||
/// </summary>
|
||||
public enum TestStatus
|
||||
{
|
||||
Preparing = 0,
|
||||
Running = 1,
|
||||
Paused = 2,
|
||||
Completed = 3,
|
||||
Aborted = 4,
|
||||
Error = 5,
|
||||
EmergencyStopped = 6
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Safety violation during test
|
||||
/// </summary>
|
||||
public class SafetyViolation
|
||||
{
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
public Guid TestRunId { get; set; }
|
||||
public DateTime Timestamp { get; set; }
|
||||
public ViolationType Type { get; set; }
|
||||
public ViolationSeverity Severity { get; set; }
|
||||
public double Value { get; set; }
|
||||
public double Threshold { get; set; }
|
||||
public string Message { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
public enum ViolationType
|
||||
{
|
||||
CrossTrackError = 1,
|
||||
HeadingError = 2,
|
||||
VelocityLimit = 3,
|
||||
AccelerationLimit = 4,
|
||||
SustainedTrackingError = 5,
|
||||
ObstacleProximity = 6
|
||||
}
|
||||
|
||||
public enum ViolationSeverity
|
||||
{
|
||||
Info = 0,
|
||||
Warning = 1,
|
||||
Critical = 2
|
||||
}
|
||||
Reference in New Issue
Block a user