Files
meeting-assistant/MeetingAssistant/Workflow/MeetingWorkflowModels.cs
T
2026-05-27 12:55:18 +02:00

124 lines
3.4 KiB
C#

using MeetingAssistant.MeetingNotes;
using YamlDotNet.Serialization;
namespace MeetingAssistant.Workflow;
public sealed class MeetingWorkflowRulesFile
{
[YamlMember(Alias = "rules")]
public List<MeetingWorkflowRule> Rules { get; set; } = [];
}
public sealed class MeetingWorkflowRule
{
[YamlMember(Alias = "name")]
public string Name { get; set; } = "";
[YamlMember(Alias = "on")]
public List<MeetingWorkflowTrigger> On { get; set; } = [];
[YamlMember(Alias = "if")]
public List<MeetingWorkflowCondition> If { get; set; } = [];
[YamlMember(Alias = "steps")]
public List<MeetingWorkflowStep> Steps { get; set; } = [];
}
public sealed class MeetingWorkflowTrigger
{
[YamlMember(Alias = "created")]
public object? Created { get; set; }
[YamlMember(Alias = "state_transition")]
public MeetingWorkflowStateTransitionTrigger? StateTransition { get; set; }
[YamlMember(Alias = "speaker_identified")]
public MeetingWorkflowSpeakerIdentifiedTrigger? SpeakerIdentified { get; set; }
}
public sealed class MeetingWorkflowStateTransitionTrigger
{
[YamlMember(Alias = "from")]
public string? From { get; set; }
[YamlMember(Alias = "to")]
public string? To { get; set; }
}
public sealed class MeetingWorkflowSpeakerIdentifiedTrigger
{
[YamlMember(Alias = "name")]
public string? Name { get; set; }
}
public sealed class MeetingWorkflowCondition
{
[YamlMember(Alias = "condition")]
public string? Condition { get; set; }
[YamlMember(Alias = "and")]
public List<MeetingWorkflowCondition>? And { get; set; }
[YamlMember(Alias = "or")]
public List<MeetingWorkflowCondition>? Or { get; set; }
[YamlMember(Alias = "not")]
public MeetingWorkflowCondition? Not { get; set; }
}
public sealed class MeetingWorkflowStep
{
[YamlMember(Alias = "uses")]
public string Uses { get; set; } = "";
[YamlMember(Alias = "property")]
public string? Property { get; set; }
[YamlMember(Alias = "name")]
public string? Name { get; set; }
[YamlMember(Alias = "value")]
public string? Value { get; set; }
}
public sealed record MeetingWorkflowTemplateModel(
MeetingWorkflowMeetingModel Meeting,
MeetingWorkflowEventModel Event,
MeetingWorkflowSpeakerModel? Speaker);
public sealed record MeetingWorkflowMeetingModel(
string Title,
IReadOnlyList<string> Attendees,
IReadOnlyList<string> Projects,
string State);
public sealed record MeetingWorkflowEventModel(
string Type,
string? From,
string? To);
public sealed record MeetingWorkflowSpeakerModel(string Name);
internal static class MeetingWorkflowStateNames
{
public static string ToRuleName(AssistantContextState state)
{
return state switch
{
AssistantContextState.CollectingMetadata => "collecting metadata",
AssistantContextState.Transcribing => "transcribing",
AssistantContextState.SpeakerRecognition => "speaker recognition",
AssistantContextState.Summarizing => "summarizing",
AssistantContextState.Finished => "finished",
AssistantContextState.Error => "error",
_ => "error"
};
}
public static bool EqualsRuleName(AssistantContextState state, string? value)
{
return string.IsNullOrWhiteSpace(value) ||
string.Equals(ToRuleName(state), value.Trim(), StringComparison.OrdinalIgnoreCase);
}
}