using TarninaHub.Domain.Enums; namespace TarninaHub.Domain.Rules; public static class SubmissionWorkflow { private static readonly IReadOnlyDictionary Transitions = new Dictionary { [SubmissionStatus.New] = [SubmissionStatus.Triaged, SubmissionStatus.Rejected], [SubmissionStatus.Triaged] = [SubmissionStatus.Matched, SubmissionStatus.Rejected, SubmissionStatus.Closed], [SubmissionStatus.Matched] = [SubmissionStatus.InProgress, SubmissionStatus.Closed, SubmissionStatus.Rejected], [SubmissionStatus.InProgress] = [SubmissionStatus.Closed, SubmissionStatus.Rejected], [SubmissionStatus.Closed] = [], [SubmissionStatus.Rejected] = [], }; public static bool CanTransition(SubmissionStatus from, SubmissionStatus to) => from == to || Transitions[from].Contains(to); public static IReadOnlyList NextStates(SubmissionStatus from) => Transitions[from]; public static bool IsTerminal(SubmissionStatus status) => Transitions[status].Length == 0; }