using ErsatzTV.Core.Interfaces.Scheduling; namespace ErsatzTV.Application.Troubleshooting.Queries; public class ValidateSequentialScheduleHandler(ISequentialScheduleValidator validator) : IRequestHandler { public async Task Handle( ValidateSequentialSchedule request, CancellationToken cancellationToken) { try { // ToJson runs first and can throw on malformed YAML (GetValidationMessages catches its // own exceptions internally); mirrors the Blazor YamlValidator ordering. string json = validator.ToJson(request.Yaml); IList messages = await validator.GetValidationMessages(request.Yaml, request.IsImport); return new ValidateSequentialScheduleViewModel(messages.Count == 0, messages.ToList(), json); } catch (Exception ex) { return new ValidateSequentialScheduleViewModel(false, [ex.Message], string.Empty); } } }