Initial commit
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user