← All source files

V11 / ca6f28eff240

ScheduleModels.cs

Lilith/Core/Scheduling/ScheduleModels.cs

Unchanged from the preceding version
CS
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; } = [];
}