Implement queue-first curation workflow

This commit is contained in:
2026-04-12 00:45:50 +02:00
parent 752593fa62
commit 7843073d13
15 changed files with 1295 additions and 471 deletions

View File

@@ -11,20 +11,14 @@ public sealed class TableContextUrlSerializer
private const string RollJumpKey = "roll";
private const string ResultIdKey = "result";
private const string ModeKey = "mode";
private const string QueueScopeKey = "scope";
public TableContextSnapshot Parse(string uri)
{
var currentUri = new Uri(uri, UriKind.Absolute);
var query = QueryHelpers.ParseQuery(currentUri.Query);
return new TableContextSnapshot(
ReadValue(query, TableKey),
ReadValue(query, GroupKey),
ReadValue(query, ColumnKey),
ReadValue(query, RollBandKey),
ReadInt(query, RollJumpKey),
ReadInt(query, ResultIdKey),
ReadMode(ReadValue(query, ModeKey)));
return new TableContextSnapshot(ReadValue(query, TableKey), ReadValue(query, GroupKey), ReadValue(query, ColumnKey), ReadValue(query, RollBandKey), ReadInt(query, RollJumpKey), ReadInt(query, ResultIdKey), ReadMode(ReadValue(query, ModeKey)), ReadValue(query, QueueScopeKey));
}
public string BuildRelativeUri(string basePath, TableContextSnapshot context)
@@ -37,10 +31,9 @@ public sealed class TableContextUrlSerializer
AddIfPresent(parameters, RollJumpKey, context.RollJump?.ToString());
AddIfPresent(parameters, ResultIdKey, context.ResultId?.ToString());
AddIfPresent(parameters, ModeKey, WriteMode(context.Mode));
AddIfPresent(parameters, QueueScopeKey, context.QueueScope);
return parameters.Count == 0
? basePath
: QueryHelpers.AddQueryString(basePath, parameters);
return parameters.Count == 0 ? basePath : QueryHelpers.AddQueryString(basePath, parameters);
}
private static void AddIfPresent(IDictionary<string, string?> parameters, string key, string? value)
@@ -52,9 +45,7 @@ public sealed class TableContextUrlSerializer
}
private static string? ReadValue(IReadOnlyDictionary<string, Microsoft.Extensions.Primitives.StringValues> query, string key) =>
query.TryGetValue(key, out var value)
? value.ToString()
: null;
query.TryGetValue(key, out var value) ? value.ToString() : null;
private static int? ReadInt(IReadOnlyDictionary<string, Microsoft.Extensions.Primitives.StringValues> query, string key)
{
@@ -65,18 +56,18 @@ public sealed class TableContextUrlSerializer
private static TableContextMode? ReadMode(string? value) =>
value?.Trim().ToLowerInvariant() switch
{
"reference" => TableContextMode.Reference,
"curation" => TableContextMode.Curation,
"reference" => TableContextMode.Reference,
"curation" => TableContextMode.Curation,
"diagnostics" => TableContextMode.Diagnostics,
_ => null
_ => null
};
private static string? WriteMode(TableContextMode? mode) =>
mode switch
{
TableContextMode.Reference => "reference",
TableContextMode.Curation => "curation",
TableContextMode.Reference => "reference",
TableContextMode.Curation => "curation",
TableContextMode.Diagnostics => "diagnostics",
_ => null
_ => null
};
}
}