using Microsoft.EntityFrameworkCore; using RobotNet10.NavigationTune.Data; using RobotNet10.NavigationTune.Shared.Models; using RobotNet10.NavigationTune.Scenarios; namespace RobotNet10.NavigationTune.Data; /// /// Repository for test scenarios /// public interface IScenarioRepository { Task GetByIdAsync(Guid id); Task> GetAllAsync(); Task> GetDefaultScenariosAsync(); Task GetEntityByIdAsync(Guid id); Task> GetAllEntitiesAsync(); Task> GetDefaultScenarioEntitiesAsync(); Task SaveAsync(TestScenario scenario); Task UpdateAsync(TestScenario scenario); Task DeleteAsync(Guid id); } public class ScenarioRepository(TuningDbContext context) : IScenarioRepository { public async Task GetByIdAsync(Guid id) { var entity = await context.TestScenarios.FindAsync(id); return entity?.ToTestScenario(); } public async Task> GetAllAsync() { var entities = await context.TestScenarios .OrderByDescending(s => s.CreatedAt) .ToListAsync(); return [.. entities.Select(e => e.ToTestScenario())]; } public async Task> GetDefaultScenariosAsync() { var entities = await context.TestScenarios .Where(s => s.IsDefault) .OrderBy(s => s.Name) .ToListAsync(); return [.. entities.Select(e => e.ToTestScenario())]; } public async Task GetEntityByIdAsync(Guid id) { return await context.TestScenarios.FindAsync(id); } public async Task> GetAllEntitiesAsync() { return await context.TestScenarios .OrderByDescending(s => s.CreatedAt) .ToListAsync(); } public async Task> GetDefaultScenarioEntitiesAsync() { return await context.TestScenarios .Where(s => s.IsDefault) .OrderBy(s => s.Name) .ToListAsync(); } public async Task 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(); } } }