101 lines
3.3 KiB
C#
101 lines
3.3 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using RobotNet10.NavigationTune.Data;
|
|
using RobotNet10.NavigationTune.Shared.Models;
|
|
using RobotNet10.NavigationTune.Scenarios;
|
|
|
|
namespace RobotNet10.NavigationTune.Data;
|
|
|
|
/// <summary>
|
|
/// Repository for test scenarios
|
|
/// </summary>
|
|
public interface IScenarioRepository
|
|
{
|
|
Task<TestScenario?> GetByIdAsync(Guid id);
|
|
Task<List<TestScenario>> GetAllAsync();
|
|
Task<List<TestScenario>> GetDefaultScenariosAsync();
|
|
Task<TestScenarioEntity?> GetEntityByIdAsync(Guid id);
|
|
Task<List<TestScenarioEntity>> GetAllEntitiesAsync();
|
|
Task<List<TestScenarioEntity>> GetDefaultScenarioEntitiesAsync();
|
|
Task<Guid> SaveAsync(TestScenario scenario);
|
|
Task UpdateAsync(TestScenario scenario);
|
|
Task DeleteAsync(Guid id);
|
|
}
|
|
|
|
public class ScenarioRepository(TuningDbContext context) : IScenarioRepository
|
|
{
|
|
public async Task<TestScenario?> GetByIdAsync(Guid id)
|
|
{
|
|
var entity = await context.TestScenarios.FindAsync(id);
|
|
return entity?.ToTestScenario();
|
|
}
|
|
|
|
public async Task<List<TestScenario>> GetAllAsync()
|
|
{
|
|
var entities = await context.TestScenarios
|
|
.OrderByDescending(s => s.CreatedAt)
|
|
.ToListAsync();
|
|
|
|
return [.. entities.Select(e => e.ToTestScenario())];
|
|
}
|
|
|
|
public async Task<List<TestScenario>> GetDefaultScenariosAsync()
|
|
{
|
|
var entities = await context.TestScenarios
|
|
.Where(s => s.IsDefault)
|
|
.OrderBy(s => s.Name)
|
|
.ToListAsync();
|
|
|
|
return [.. entities.Select(e => e.ToTestScenario())];
|
|
}
|
|
|
|
public async Task<TestScenarioEntity?> GetEntityByIdAsync(Guid id)
|
|
{
|
|
return await context.TestScenarios.FindAsync(id);
|
|
}
|
|
|
|
public async Task<List<TestScenarioEntity>> GetAllEntitiesAsync()
|
|
{
|
|
return await context.TestScenarios
|
|
.OrderByDescending(s => s.CreatedAt)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public async Task<List<TestScenarioEntity>> GetDefaultScenarioEntitiesAsync()
|
|
{
|
|
return await context.TestScenarios
|
|
.Where(s => s.IsDefault)
|
|
.OrderBy(s => s.Name)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public async Task<Guid> SaveAsync(TestScenario scenario)
|
|
{
|
|
var entity = TestScenarioEntity.FromTestScenario(scenario);
|
|
context.TestScenarios.Add(entity);
|
|
await context.SaveChangesAsync();
|
|
return entity.Id;
|
|
}
|
|
|
|
public async Task UpdateAsync(TestScenario scenario)
|
|
{
|
|
var existing = await context.TestScenarios.FindAsync(scenario.Id) ?? throw new InvalidOperationException($"Scenario with ID {scenario.Id} not found.");
|
|
var updated = TestScenarioEntity.FromTestScenario(scenario);
|
|
existing.Name = updated.Name;
|
|
existing.Description = updated.Description;
|
|
existing.Type = updated.Type;
|
|
existing.IsDefault = updated.IsDefault;
|
|
existing.ConfigJson = updated.ConfigJson;
|
|
await context.SaveChangesAsync();
|
|
}
|
|
|
|
public async Task DeleteAsync(Guid id)
|
|
{
|
|
var entity = await context.TestScenarios.FindAsync(id);
|
|
if (entity != null)
|
|
{
|
|
context.TestScenarios.Remove(entity);
|
|
await context.SaveChangesAsync();
|
|
}
|
|
}
|
|
}
|