V15 / 313404a015e8
ScheduleModels.cs
Lilith/Core/Scheduling/ScheduleModels.cs
Unchanged from the preceding versionCS
using System.Text.Json;
using Lilith.Core.Workspace;
namespace Lilith.Core.Scheduling;
public sealed record ScheduleOptions(string RootDirectory, WorkspaceAccessMode Mode = WorkspaceAccessMode.Ask);
public sealed record ScheduleRequest(string Operation, string Name = "", string Kind = "timer", int Seconds = 0,
string Cron = "", string TimeZone = "", string Message = "", string Scenario = "", string InputsJson = "{}");
public sealed record ScheduleEntry(string Name, string Kind, int Seconds, string Cron, string TimeZone,
string Message, string Scenario, Dictionary<string, string> Inputs, DateTimeOffset? NextUtc, string Status, int Revision,
string? LastOutcome = null, DateTimeOffset? LastFinishedUtc = null);
public sealed record ScheduleProposal(string Id, ScheduleRequest Request, int? ExpectedRevision);
public sealed record ScheduleEvent(string Id, string Name, string Kind, DateTimeOffset AtUtc, string Message,
ScheduleEntry? Job = null);
public sealed record ScheduleResult(string Status, string Message, string? ProposalId = null, object? Data = null)
{
public string ToReply() => Status == "needs_approval"
? $"{Message}\nReview with /schedules review {ProposalId}; then /schedule-approve {ProposalId} or /schedule-reject {ProposalId}."
: Data is null ? Message : JsonSerializer.Serialize(this);
}
internal sealed class ScheduleState
{
public List<ScheduleEntry> Entries { get; set; } = [];
public List<ScheduleProposal> Pending { get; set; } = [];
public List<ScheduleEvent> Events { get; set; } = [];
}