using ErsatzTV.Application.Playouts; using ErsatzTV.Core; using ErsatzTV.Core.Domain; namespace ErsatzTV.Controllers.Api.Requests; public record CreatePlayoutRequest( int ChannelId, PlayoutScheduleKind ScheduleKind, int? ProgramScheduleId, string ScheduleFile) { public Either ToCommand() => ScheduleKind switch { PlayoutScheduleKind.Classic => ProgramScheduleId is { } programScheduleId ? new CreateClassicPlayout(ChannelId, programScheduleId) : BaseError.New("[ProgramScheduleId] is required for Classic playouts"), PlayoutScheduleKind.Block => new CreateBlockPlayout(ChannelId), PlayoutScheduleKind.Sequential => !string.IsNullOrWhiteSpace(ScheduleFile) ? new CreateSequentialPlayout(ChannelId, ScheduleFile) : BaseError.New("[ScheduleFile] is required for Sequential playouts"), PlayoutScheduleKind.Scripted => !string.IsNullOrWhiteSpace(ScheduleFile) ? new CreateScriptedPlayout(ChannelId, ScheduleFile) : BaseError.New("[ScheduleFile] is required for Scripted playouts"), PlayoutScheduleKind.ExternalJson => !string.IsNullOrWhiteSpace(ScheduleFile) ? new CreateExternalJsonPlayout(ChannelId, ScheduleFile) : BaseError.New("[ScheduleFile] is required for ExternalJson playouts"), _ => BaseError.New("[ScheduleKind] must be one of Classic, Block, Sequential, Scripted, ExternalJson") }; }