diff --git a/F4SDM42WebApi/F4SD - M42WebApi.csproj b/F4SDM42WebApi/F4SD - M42WebApi.csproj index 4143401..85b0323 100644 --- a/F4SDM42WebApi/F4SD - M42WebApi.csproj +++ b/F4SDM42WebApi/F4SD - M42WebApi.csproj @@ -91,13 +91,13 @@ - + - - Shared\ActivityFilterCompiler.cs + + Shared\TicketFilterCompiler.cs diff --git a/F4SDM42WebApi/F4SDHelperService.UserId.cs b/F4SDM42WebApi/F4SDHelperService.UserId.cs index d0dc9eb..7cfacf9 100644 --- a/F4SDM42WebApi/F4SDHelperService.UserId.cs +++ b/F4SDM42WebApi/F4SDHelperService.UserId.cs @@ -23,7 +23,7 @@ namespace C4IT.F4SD int hours, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var method = MethodBase.GetCurrentMethod(); LogMethodBegin(method); @@ -34,7 +34,7 @@ namespace C4IT.F4SD return new List(); var activityFilter = GetActivityFilter(userId, hours, ticketAndServiceRequestEnabled(), queueoption, queues); - activityFilter = await ApplyActivityFiltersAsync(activityFilter, filters); + activityFilter = await ApplyTicketFiltersAsync(activityFilter, filters); if (string.IsNullOrWhiteSpace(activityFilter)) return new List(); LogEntry($"Generating ticket list for userId '{userId}'. ASQL filter: {activityFilter}", LogLevels.Debug); @@ -96,7 +96,7 @@ namespace C4IT.F4SD IEnumerable keys, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var method = MethodBase.GetCurrentMethod(); LogMethodBegin(method); @@ -144,7 +144,7 @@ namespace C4IT.F4SD IEnumerable keys, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var roleIds = await ResolveTicketOverviewRoleIdsAsync(userId, roleGuids); return await getTicketOverviewCountsByRoles(null, roleIds, keys, queueoption, queues, filters); @@ -157,7 +157,7 @@ namespace C4IT.F4SD int count, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var method = MethodBase.GetCurrentMethod(); LogMethodBegin(method); @@ -220,7 +220,7 @@ namespace C4IT.F4SD bool useRoleScope, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { if (userId == Guid.Empty) return new List(); @@ -233,14 +233,14 @@ namespace C4IT.F4SD Guid userId, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { if (userId == Guid.Empty) return new List(); var roleIds = await ResolveTicketOverviewRoleIdsAsync(userId, null); var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues); - filter = await ApplyActivityFiltersAsync(filter, filters); + filter = await ApplyTicketFiltersAsync(filter, filters); if (string.IsNullOrWhiteSpace(filter)) return new List(); @@ -252,15 +252,15 @@ namespace C4IT.F4SD bool useRoleScope, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var filter = BuildTicketOverviewBaseFilter(queueoption, queues); if (!useRoleScope) - return await ApplyActivityFiltersAsync(filter + $" AND (Recipient = '{Escape(userId.ToString("D"))}')", filters); + return await ApplyTicketFiltersAsync(filter + $" AND (Recipient = '{Escape(userId.ToString("D"))}')", filters); var roleIds = await ResolveTicketOverviewRoleIdsAsync(userId, null); filter = BuildTicketOverviewFilterForRoleIds(roleIds, filter); - return await ApplyActivityFiltersAsync(filter, filters); + return await ApplyTicketFiltersAsync(filter, filters); } private async Task> ResolveTicketOverviewRoleIdsAsync(Guid userId, IEnumerable roleGuids) diff --git a/F4SDM42WebApi/F4SDHelperService.cs b/F4SDM42WebApi/F4SDHelperService.cs index 77d0256..73d98af 100644 --- a/F4SDM42WebApi/F4SDHelperService.cs +++ b/F4SDM42WebApi/F4SDHelperService.cs @@ -186,7 +186,7 @@ namespace C4IT.F4SD } - internal async Task> getTicketListByUser(string userSid, int hours, int queueoption, List queues, cActivityFilterPolicy filters = null) + internal async Task> getTicketListByUser(string userSid, int hours, int queueoption, List queues, cTicketFilterPolicy filters = null) { var CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); @@ -197,7 +197,7 @@ namespace C4IT.F4SD var tickets = new List(); var activityFilter = GetActivityFilter(userSid, hours, ticketAndServiceRequestEnabled(), queueoption, queues); - activityFilter = await ApplyActivityFiltersAsync(activityFilter, filters); + activityFilter = await ApplyTicketFiltersAsync(activityFilter, filters); if (string.IsNullOrWhiteSpace(activityFilter)) return new List(); LogEntry($"ASql Filter: {activityFilter}"); @@ -383,7 +383,7 @@ namespace C4IT.F4SD IEnumerable keys, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); @@ -440,7 +440,7 @@ namespace C4IT.F4SD IEnumerable keys, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); @@ -505,7 +505,7 @@ namespace C4IT.F4SD int count, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); @@ -583,7 +583,7 @@ namespace C4IT.F4SD bool useRoleScope, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); @@ -612,7 +612,7 @@ namespace C4IT.F4SD string sid, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); @@ -625,7 +625,7 @@ namespace C4IT.F4SD var roleIds = await ResolveTicketOverviewRoleIdsAsync(sid, null); var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues); - filter = await ApplyActivityFiltersAsync(filter, filters); + filter = await ApplyTicketFiltersAsync(filter, filters); if (string.IsNullOrWhiteSpace(filter)) return new List(); @@ -647,7 +647,7 @@ namespace C4IT.F4SD IEnumerable roleIds, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); @@ -656,7 +656,7 @@ namespace C4IT.F4SD await Task.Delay(0); var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues); - filter = await ApplyActivityFiltersAsync(filter, filters); + filter = await ApplyTicketFiltersAsync(filter, filters); return await LoadTicketOverviewEntriesByFilter(filter); } catch (Exception E) @@ -800,7 +800,7 @@ namespace C4IT.F4SD bool useRoleScope, int queueoption, List queues, - cActivityFilterPolicy filters = null) + cTicketFilterPolicy filters = null) { var filter = BuildTicketOverviewBaseFilter(queueoption, queues); @@ -808,12 +808,12 @@ namespace C4IT.F4SD { var recipientFilter = $"Recipient.Accounts.T(SPSAccountClassAd).Sid = '{Escape(sid)}'"; filter += $" AND ({recipientFilter})"; - return await ApplyActivityFiltersAsync(filter, filters); + return await ApplyTicketFiltersAsync(filter, filters); } var roleIds = await ResolveTicketOverviewRoleIdsAsync(sid, null); filter = BuildTicketOverviewFilterForRoleIds(roleIds, filter); - return await ApplyActivityFiltersAsync(filter, filters); + return await ApplyTicketFiltersAsync(filter, filters); } private string BuildTicketOverviewBaseFilter(int queueoption, List queues) diff --git a/F4SDM42WebApi/F4SDM42WebApiController.cs b/F4SDM42WebApi/F4SDM42WebApiController.cs index 3caefd2..41c0e11 100644 --- a/F4SDM42WebApi/F4SDM42WebApiController.cs +++ b/F4SDM42WebApi/F4SDM42WebApiController.cs @@ -155,7 +155,7 @@ namespace C4IT.F4SD } [Route("v2/getTicketList"), HttpPost] - public async Task> getTicketListV2([FromBody] cTicketActivityListRequest request) + public async Task> getTicketListV2([FromBody] cTicketListFilterRequest request) { if (request?.UserId != Guid.Empty) return await _f4stHelperService.getTicketListByUser( @@ -388,10 +388,10 @@ namespace C4IT.F4SD request?.Filters) ?? new List(); } - [Route("v2/getActivityFilterCapabilities"), HttpGet] - public cTicketActivityFilterCapabilities getActivityFilterCapabilitiesV2() + [Route("v2/getTicketFilterCapabilities"), HttpGet] + public cTicketFilterCapabilities getTicketFilterCapabilitiesV2() { - return _f4stHelperService.GetActivityFilterCapabilities(); + return _f4stHelperService.GetTicketFilterCapabilities(); } /* [Route("updateActivitySolution/{objectId}"), HttpPost] diff --git a/F4SDM42WebApi/ActivityFilterService.cs b/F4SDM42WebApi/TicketFilterService.cs similarity index 83% rename from F4SDM42WebApi/ActivityFilterService.cs rename to F4SDM42WebApi/TicketFilterService.cs index 1c887f6..689603a 100644 --- a/F4SDM42WebApi/ActivityFilterService.cs +++ b/F4SDM42WebApi/TicketFilterService.cs @@ -25,12 +25,12 @@ namespace C4IT.F4SD private static readonly Dictionary workspaceRoleCache = new Dictionary(StringComparer.OrdinalIgnoreCase); - internal async Task ApplyActivityFiltersAsync(string baseFilter, cActivityFilterPolicy policy) + internal async Task ApplyTicketFiltersAsync(string baseFilter, cTicketFilterPolicy policy) { - var result = await ActivityFilterCompiler.CompileAsync(policy, ResolveWorkspaceRolesAsync); + var result = await TicketFilterCompiler.CompileAsync(policy, ResolveWorkspaceRolesAsync); if (!result.Success) { - LogEntry($"Activity filter rejected (fail closed): {result.Error}", LogLevels.Error); + LogEntry($"Ticket filter rejected (fail closed): {result.Error}", LogLevels.Error); return null; } @@ -39,22 +39,22 @@ namespace C4IT.F4SD : $"({baseFilter}) AND ({result.Clause})"; } - internal cTicketActivityFilterCapabilities GetActivityFilterCapabilities() + internal cTicketFilterCapabilities GetTicketFilterCapabilities() { - var capabilities = new cTicketActivityFilterCapabilities + var capabilities = new cTicketFilterCapabilities { - Provider = ActivityFilterCompiler.ProviderName, - CommonFields = new List { ActivityFilterCompiler.AssignmentGroupField }, - ProviderFields = new List { ActivityFilterCompiler.QueueField } + Provider = TicketFilterCompiler.ProviderName, + CommonFields = new List { TicketFilterCompiler.AssignmentGroupField }, + ProviderFields = new List { TicketFilterCompiler.QueueField } }; if (SPSDataEngineSchemaReader.ClassGetIDFromName("ESMWorkspaceClassBase") != Guid.Empty) - capabilities.ProviderFields.Add(ActivityFilterCompiler.WorkspaceField); + capabilities.ProviderFields.Add(TicketFilterCompiler.WorkspaceField); return capabilities; } - private async Task ResolveWorkspaceRolesAsync(cActivityFilter filter) + private async Task ResolveWorkspaceRolesAsync(cTicketFilter filter) { await Task.Delay(0); var workspaceClassId = SPSDataEngineSchemaReader.ClassGetIDFromName("ESMWorkspaceClassBase"); @@ -62,7 +62,7 @@ namespace C4IT.F4SD return WorkspaceFailure("ESMWorkspaceClassBase is not available."); var roleIds = new HashSet(); - foreach (var value in filter?.Values ?? new List()) + foreach (var value in filter?.Values ?? new List()) { var key = !string.IsNullOrWhiteSpace(value?.ID) ? "id:" + value.ID.Trim() @@ -125,7 +125,7 @@ namespace C4IT.F4SD roleIds.UnionWith(resolved); } - return new ActivityFilterResolution + return new TicketFilterResolution { Success = true, RoleIds = roleIds.ToList() @@ -167,9 +167,9 @@ namespace C4IT.F4SD } } - private static ActivityFilterResolution WorkspaceFailure(string error) + private static TicketFilterResolution WorkspaceFailure(string error) { - return new ActivityFilterResolution + return new TicketFilterResolution { Success = false, Error = error diff --git a/Legacy/F4SDM42WebApi/ActivityFilterService.cs b/Legacy/F4SDM42WebApi/ActivityFilterService.cs deleted file mode 100644 index fa8d053..0000000 --- a/Legacy/F4SDM42WebApi/ActivityFilterService.cs +++ /dev/null @@ -1,63 +0,0 @@ -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 currentActivityFilters = - new AsyncLocal(); - - 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 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 { ActivityFilterCompiler.AssignmentGroupField }, - ProviderFields = new List { ActivityFilterCompiler.QueueField } - }; - } - } -} diff --git a/Legacy/F4SDM42WebApi/F4SD - M42WebApi.Legacy.csproj b/Legacy/F4SDM42WebApi/F4SD - M42WebApi.Legacy.csproj index cb2a9f7..07d3b04 100644 --- a/Legacy/F4SDM42WebApi/F4SD - M42WebApi.Legacy.csproj +++ b/Legacy/F4SDM42WebApi/F4SD - M42WebApi.Legacy.csproj @@ -54,10 +54,10 @@ - + - Shared\ActivityFilterCompiler.cs + Shared\TicketFilterCompiler.cs Properties\SharedAssemblyInfo.cs diff --git a/Legacy/F4SDM42WebApi/F4SDHelperService.cs b/Legacy/F4SDM42WebApi/F4SDHelperService.cs index dac90a2..b1848cd 100644 --- a/Legacy/F4SDM42WebApi/F4SDHelperService.cs +++ b/Legacy/F4SDM42WebApi/F4SDHelperService.cs @@ -166,7 +166,7 @@ namespace C4IT.F4SD var tickets = new List(); var activityFilter = GetActivityFilter(userSid, hours, ticketAndServiceRequestEnabled(), queueoption, queues); - activityFilter = await ApplyActivityFiltersAsync(activityFilter, null); + activityFilter = await ApplyTicketFiltersAsync(activityFilter, null); if (string.IsNullOrWhiteSpace(activityFilter)) return new List(); LogEntry($"ASql Filter: {activityFilter}"); @@ -282,7 +282,7 @@ namespace C4IT.F4SD var tickets = new List(); var activityFilter = GetActivityFilter(userId, hours, ticketAndServiceRequestEnabled(), queueoption, queues); - activityFilter = await ApplyActivityFiltersAsync(activityFilter, null); + activityFilter = await ApplyTicketFiltersAsync(activityFilter, null); if (string.IsNullOrWhiteSpace(activityFilter)) return new List(); LogEntry($"ASql Filter: {activityFilter}"); @@ -988,7 +988,7 @@ namespace C4IT.F4SD var roleIds = await ResolveTicketOverviewRoleIdsAsync(sid, null); var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues); - filter = await ApplyActivityFiltersAsync(filter, null); + filter = await ApplyTicketFiltersAsync(filter, null); if (string.IsNullOrWhiteSpace(filter)) return new List(); @@ -1022,7 +1022,7 @@ namespace C4IT.F4SD var roleIds = await ResolveTicketOverviewRoleIdsAsync(userId, null); var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues); - filter = await ApplyActivityFiltersAsync(filter, null); + filter = await ApplyTicketFiltersAsync(filter, null); if (string.IsNullOrWhiteSpace(filter)) return new List(); @@ -1052,7 +1052,7 @@ namespace C4IT.F4SD await Task.Delay(0); var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues); - filter = await ApplyActivityFiltersAsync(filter, null); + filter = await ApplyTicketFiltersAsync(filter, null); return await LoadTicketOverviewEntriesByFilter(filter); } catch (Exception E) @@ -1204,12 +1204,12 @@ namespace C4IT.F4SD { var recipientFilter = $"Recipient.Accounts.T(SPSAccountClassAd).Sid = '{Escape(sid)}'"; filter += $" AND ({recipientFilter})"; - return await ApplyActivityFiltersAsync(filter, null); + return await ApplyTicketFiltersAsync(filter, null); } var roleIds = await ResolveTicketOverviewRoleIdsAsync(sid, null); filter = BuildTicketOverviewFilterForRoleIds(roleIds, filter); - return await ApplyActivityFiltersAsync(filter, null); + return await ApplyTicketFiltersAsync(filter, null); } private async Task BuildTicketOverviewFilterAsync( @@ -1224,12 +1224,12 @@ namespace C4IT.F4SD { var recipientFilter = $"Recipient = '{Escape(userId.ToString("D"))}'"; filter += $" AND ({recipientFilter})"; - return await ApplyActivityFiltersAsync(filter, null); + return await ApplyTicketFiltersAsync(filter, null); } var roleIds = await ResolveTicketOverviewRoleIdsAsync(userId, null); filter = BuildTicketOverviewFilterForRoleIds(roleIds, filter); - return await ApplyActivityFiltersAsync(filter, null); + return await ApplyTicketFiltersAsync(filter, null); } private string BuildTicketOverviewBaseFilter(int queueoption, List queues) diff --git a/Legacy/F4SDM42WebApi/F4SDM42WebApiController.cs b/Legacy/F4SDM42WebApi/F4SDM42WebApiController.cs index f5f5e71..908bb3c 100644 --- a/Legacy/F4SDM42WebApi/F4SDM42WebApiController.cs +++ b/Legacy/F4SDM42WebApi/F4SDM42WebApiController.cs @@ -139,9 +139,9 @@ namespace C4IT.F4SD } [Route("v2/getTicketList"), HttpPost] - public async Task> getTicketListV2([FromBody] cTicketActivityListRequest request) + public async Task> getTicketListV2([FromBody] cTicketListFilterRequest request) { - using (_f4stHelperService.BeginActivityFilterScope(request?.Filters)) + using (_f4stHelperService.BeginTicketFilterScope(request?.Filters)) { if (request?.UserId != Guid.Empty) return await _f4stHelperService.getTicketListByUser( @@ -217,7 +217,7 @@ namespace C4IT.F4SD public async Task getTicketOverviewCountsV2( [FromBody] cTicketOverviewFilterRequest request) { - using (_f4stHelperService.BeginActivityFilterScope(request?.Filters)) + using (_f4stHelperService.BeginTicketFilterScope(request?.Filters)) { if (request?.UserId != Guid.Empty) return await _f4stHelperService.getTicketOverviewCounts( @@ -316,7 +316,7 @@ namespace C4IT.F4SD public async Task> getTicketOverviewRelationsV2( [FromBody] cTicketOverviewFilterRequest request) { - using (_f4stHelperService.BeginActivityFilterScope(request?.Filters)) + using (_f4stHelperService.BeginTicketFilterScope(request?.Filters)) { if (request?.UserId != Guid.Empty) return await _f4stHelperService.getTicketOverviewRelations( @@ -337,10 +337,10 @@ namespace C4IT.F4SD } } - [Route("v2/getActivityFilterCapabilities"), HttpGet] - public cTicketActivityFilterCapabilities getActivityFilterCapabilitiesV2() + [Route("v2/getTicketFilterCapabilities"), HttpGet] + public cTicketFilterCapabilities getTicketFilterCapabilitiesV2() { - return _f4stHelperService.GetActivityFilterCapabilities(); + return _f4stHelperService.GetTicketFilterCapabilities(); } diff --git a/Legacy/F4SDM42WebApi/TicketFilterService.cs b/Legacy/F4SDM42WebApi/TicketFilterService.cs new file mode 100644 index 0000000..c48659f --- /dev/null +++ b/Legacy/F4SDM42WebApi/TicketFilterService.cs @@ -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 currentTicketFilters = + new AsyncLocal(); + + private sealed class TicketFilterScope : IDisposable + { + private readonly cTicketFilterPolicy previous; + + public TicketFilterScope(cTicketFilterPolicy filters) + { + previous = currentTicketFilters.Value; + currentTicketFilters.Value = filters; + } + + public void Dispose() + { + currentTicketFilters.Value = previous; + } + } + + internal IDisposable BeginTicketFilterScope(cTicketFilterPolicy filters) + { + return new TicketFilterScope(filters); + } + + internal async Task ApplyTicketFiltersAsync(string baseFilter, cTicketFilterPolicy policy) + { + var result = await TicketFilterCompiler.CompileAsync(policy ?? currentTicketFilters.Value, null); + if (!result.Success) + { + LogEntry($"Ticket filter rejected (fail closed): {result.Error}", LogLevels.Error); + return null; + } + + return string.IsNullOrWhiteSpace(result.Clause) + ? baseFilter + : $"({baseFilter}) AND ({result.Clause})"; + } + + internal cTicketFilterCapabilities GetTicketFilterCapabilities() + { + return new cTicketFilterCapabilities + { + Provider = TicketFilterCompiler.ProviderName, + CommonFields = new List { TicketFilterCompiler.AssignmentGroupField }, + ProviderFields = new List { TicketFilterCompiler.QueueField } + }; + } + } +} diff --git a/Shared/ActivityFilterCompiler.cs b/Shared/TicketFilterCompiler.cs similarity index 79% rename from Shared/ActivityFilterCompiler.cs rename to Shared/TicketFilterCompiler.cs index 4855dc7..cc2c197 100644 --- a/Shared/ActivityFilterCompiler.cs +++ b/Shared/TicketFilterCompiler.cs @@ -7,40 +7,40 @@ using C4IT.FASD.Base; namespace C4IT.F4SD { - internal sealed class ActivityFilterResolution + internal sealed class TicketFilterResolution { public bool Success { get; set; } public string Error { get; set; } public List RoleIds { get; set; } = new List(); } - internal sealed class ActivityFilterCompilationResult + internal sealed class TicketFilterCompilationResult { public bool Success { get; set; } public string Clause { get; set; } public string Error { get; set; } } - internal static class ActivityFilterCompiler + internal static class TicketFilterCompiler { internal const string ProviderName = "Matrix42"; internal const string AssignmentGroupField = "AssignmentGroup"; internal const string QueueField = "Queue"; internal const string WorkspaceField = "Workspace"; - internal static async Task CompileAsync( - cActivityFilterPolicy policy, - Func> workspaceResolver) + internal static async Task CompileAsync( + cTicketFilterPolicy policy, + Func> workspaceResolver) { var clauses = new List(); - foreach (var filter in policy?.Filters ?? new List()) + foreach (var filter in policy?.Filters ?? new List()) { if (filter == null || !filter.Enabled) continue; var providerSpecific = !string.IsNullOrWhiteSpace(filter.Provider); if (providerSpecific && !string.Equals(filter.Provider, ProviderName, StringComparison.OrdinalIgnoreCase)) - return Fail($"Unsupported activity filter provider '{filter.Provider}'."); + return Fail($"Unsupported ticket filter provider '{filter.Provider}'."); var field = filter.Field?.Trim(); string emptyClause; @@ -70,37 +70,37 @@ namespace C4IT.F4SD } else { - return Fail($"Unsupported activity filter field '{filter.Provider}:{field}'."); + return Fail($"Unsupported ticket filter field '{filter.Provider}:{field}'."); } - if (filter.EmptyHandling == enumActivityFilterEmptyHandling.only) + if (filter.EmptyHandling == enumTicketFilterEmptyHandling.only) { clauses.Add($"({emptyClause})"); continue; } if (string.IsNullOrWhiteSpace(valueClause)) - return Fail($"Activity filter '{filter.Provider}:{field}' has no valid values."); + return Fail($"Ticket filter '{filter.Provider}:{field}' has no valid values."); - var matchClause = filter.Match == enumActivityFilterMatch.exclude + var matchClause = filter.Match == enumTicketFilterMatch.exclude ? $"NOT ({valueClause})" : $"({valueClause})"; - clauses.Add(filter.EmptyHandling == enumActivityFilterEmptyHandling.include + clauses.Add(filter.EmptyHandling == enumTicketFilterEmptyHandling.include ? $"(({emptyClause}) OR ({matchClause}))" : $"((NOT ({emptyClause})) AND ({matchClause}))"); } - return new ActivityFilterCompilationResult + return new TicketFilterCompilationResult { Success = true, Clause = string.Join(" AND ", clauses) }; } - private static string BuildValueClause(string idField, string nameField, IEnumerable values) + private static string BuildValueClause(string idField, string nameField, IEnumerable values) { - var items = (values ?? Enumerable.Empty()) + var items = (values ?? Enumerable.Empty()) .Where(value => value != null) .ToList(); var ids = items @@ -139,9 +139,9 @@ namespace C4IT.F4SD return $"'{(value ?? string.Empty).Replace("'", "''")}'"; } - private static ActivityFilterCompilationResult Fail(string error) + private static TicketFilterCompilationResult Fail(string error) { - return new ActivityFilterCompilationResult + return new TicketFilterCompilationResult { Success = false, Error = error diff --git a/docs/postman/C4IT-F4SD-M42WebApi.postman_collection.json b/docs/postman/C4IT-F4SD-M42WebApi.postman_collection.json index 184695c..f230a22 100644 --- a/docs/postman/C4IT-F4SD-M42WebApi.postman_collection.json +++ b/docs/postman/C4IT-F4SD-M42WebApi.postman_collection.json @@ -1036,17 +1036,17 @@ ] }, { - "name": "06 Activity Filter APIs v2", + "name": "06 Ticket Filter APIs v2", "item": [ { - "name": "get activity filter capabilities", + "name": "get ticket filter capabilities", "request": { "method": "GET", "header": [{ "key": "Accept", "value": "application/json" }], "url": { - "raw": "{{baseUrl}}/api/c4itf4sdwebapi/v2/getActivityFilterCapabilities", + "raw": "{{baseUrl}}/api/c4itf4sdwebapi/v2/getTicketFilterCapabilities", "host": ["{{baseUrl}}"], - "path": ["api", "c4itf4sdwebapi", "v2", "getActivityFilterCapabilities"] + "path": ["api", "c4itf4sdwebapi", "v2", "getTicketFilterCapabilities"] } } },