Add provider-aware activity filter API

This commit is contained in:
Drechsler, Meik
2026-07-23 11:09:14 +02:00
parent af679472db
commit 083fdf01dc
11 changed files with 728 additions and 74 deletions

View File

@@ -0,0 +1,63 @@
using System.Collections.Generic;
using System;
using System.Threading;
using System.Threading.Tasks;
using C4IT.FASD.Base;
using C4IT.Logging;
using static C4IT.Logging.cLogManager;
namespace C4IT.F4SD
{
public partial class F4SDHelperService
{
private static readonly AsyncLocal<cActivityFilterPolicy> currentActivityFilters =
new AsyncLocal<cActivityFilterPolicy>();
private sealed class ActivityFilterScope : IDisposable
{
private readonly cActivityFilterPolicy previous;
public ActivityFilterScope(cActivityFilterPolicy filters)
{
previous = currentActivityFilters.Value;
currentActivityFilters.Value = filters;
}
public void Dispose()
{
currentActivityFilters.Value = previous;
}
}
internal IDisposable BeginActivityFilterScope(cActivityFilterPolicy filters)
{
return new ActivityFilterScope(filters);
}
internal async Task<string> ApplyActivityFiltersAsync(string baseFilter, cActivityFilterPolicy policy)
{
var result = await ActivityFilterCompiler.CompileAsync(policy ?? currentActivityFilters.Value, null);
if (!result.Success)
{
LogEntry($"Activity filter rejected (fail closed): {result.Error}", LogLevels.Error);
return null;
}
return string.IsNullOrWhiteSpace(result.Clause)
? baseFilter
: $"({baseFilter}) AND ({result.Clause})";
}
internal cTicketActivityFilterCapabilities GetActivityFilterCapabilities()
{
return new cTicketActivityFilterCapabilities
{
Provider = ActivityFilterCompiler.ProviderName,
CommonFields = new List<string> { ActivityFilterCompiler.AssignmentGroupField },
ProviderFields = new List<string> { ActivityFilterCompiler.QueueField }
};
}
}
}