T5: Add ExceptionApplication model and interface
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
using System.Collections.Immutable;
|
||||
namespace StellaOps.Policy.Exceptions.Models;
|
||||
public sealed record ExceptionApplication{public Guid Id{get;init;}public Guid TenantId{get;init;}public required string ExceptionId{get;init;}public required string FindingId{get;init;}public string? VulnerabilityId{get;init;}public required string OriginalStatus{get;init;}public required string AppliedStatus{get;init;}public required string EffectName{get;init;}public required string EffectType{get;init;}public Guid? EvaluationRunId{get;init;}public string? PolicyBundleDigest{get;init;}public DateTimeOffset AppliedAt{get;init;}public ImmutableDictionary<string,string> Metadata{get;init;}=ImmutableDictionary<string,string>.Empty;public static ExceptionApplication Create(Guid tenantId,string exceptionId,string findingId,string originalStatus,string appliedStatus,string effectName,string effectType,string? vulnerabilityId=null,Guid? evaluationRunId=null,string? policyBundleDigest=null,ImmutableDictionary<string,string>? metadata=null){ArgumentException.ThrowIfNullOrWhiteSpace(exceptionId);ArgumentException.ThrowIfNullOrWhiteSpace(findingId);return new ExceptionApplication{Id=Guid.NewGuid(),TenantId=tenantId,ExceptionId=exceptionId,FindingId=findingId,VulnerabilityId=vulnerabilityId,OriginalStatus=originalStatus,AppliedStatus=appliedStatus,EffectName=effectName,EffectType=effectType,EvaluationRunId=evaluationRunId,PolicyBundleDigest=policyBundleDigest,AppliedAt=DateTimeOffset.UtcNow,Metadata=metadata??ImmutableDictionary<string,string>.Empty};}}
|
||||
@@ -0,0 +1 @@
|
||||
using StellaOps.Policy.Exceptions.Models;namespace StellaOps.Policy.Exceptions.Repositories;public record ExceptionApplicationStatistics(int TotalApplications,int UniqueExceptions,int UniqueFindings,int UniqueVulnerabilities,Dictionary<string,int> ByEffectType,Dictionary<string,int> ByAppliedStatus,DateTimeOffset? EarliestApplication,DateTimeOffset? LatestApplication);public record ExceptionApplicationFilter(string? ExceptionId=null,string? FindingId=null,string? VulnerabilityId=null,Guid? EvaluationRunId=null,string? EffectType=null,string? AppliedStatus=null,DateTimeOffset? FromDate=null,DateTimeOffset? ToDate=null,int? Limit=null,int? Offset=null);public interface IExceptionApplicationRepository{Task<ExceptionApplication> RecordAsync(ExceptionApplication application,CancellationToken ct=default);Task<IReadOnlyList<ExceptionApplication>> RecordBatchAsync(IEnumerable<ExceptionApplication> applications,CancellationToken ct=default);Task<IReadOnlyList<ExceptionApplication>> GetByExceptionIdAsync(Guid tenantId,string exceptionId,int? limit=null,CancellationToken ct=default);Task<IReadOnlyList<ExceptionApplication>> GetByFindingIdAsync(Guid tenantId,string findingId,int? limit=null,CancellationToken ct=default);Task<IReadOnlyList<ExceptionApplication>> GetByVulnerabilityIdAsync(Guid tenantId,string vulnerabilityId,int? limit=null,CancellationToken ct=default);Task<IReadOnlyList<ExceptionApplication>> GetByEvaluationRunIdAsync(Guid tenantId,Guid evaluationRunId,CancellationToken ct=default);Task<IReadOnlyList<ExceptionApplication>> GetByTimeRangeAsync(Guid tenantId,DateTimeOffset from,DateTimeOffset to,int? limit=null,CancellationToken ct=default);Task<ExceptionApplicationStatistics> GetStatisticsAsync(Guid tenantId,ExceptionApplicationFilter? filter=null,CancellationToken ct=default);Task<int> CountAsync(Guid tenantId,ExceptionApplicationFilter? filter=null,CancellationToken ct=default);}
|
||||
Reference in New Issue
Block a user