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

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();
}
}
}