Refactor code structure for improved readability and maintainability; optimize performance in key functions.
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
using StellaOps.Findings.Ledger.WebService.Contracts;
|
||||
|
||||
namespace StellaOps.Findings.Ledger.WebService.Services;
|
||||
|
||||
public interface IFindingSummaryService
|
||||
{
|
||||
Task<FindingSummary?> GetSummaryAsync(Guid findingId, CancellationToken ct);
|
||||
Task<FindingSummaryPage> GetSummariesAsync(FindingSummaryFilter filter, CancellationToken ct);
|
||||
}
|
||||
|
||||
public sealed class FindingSummaryService : IFindingSummaryService
|
||||
{
|
||||
private readonly IFindingSummaryBuilder _builder;
|
||||
private readonly IFindingRepository _repository;
|
||||
|
||||
public FindingSummaryService(
|
||||
IFindingSummaryBuilder builder,
|
||||
IFindingRepository repository)
|
||||
{
|
||||
_builder = builder;
|
||||
_repository = repository;
|
||||
}
|
||||
|
||||
public async Task<FindingSummary?> GetSummaryAsync(Guid findingId, CancellationToken ct)
|
||||
{
|
||||
var finding = await _repository.GetByIdAsync(findingId, ct);
|
||||
if (finding is null)
|
||||
return null;
|
||||
|
||||
return _builder.Build(finding);
|
||||
}
|
||||
|
||||
public async Task<FindingSummaryPage> GetSummariesAsync(FindingSummaryFilter filter, CancellationToken ct)
|
||||
{
|
||||
var (findings, totalCount) = await _repository.GetPagedAsync(
|
||||
page: filter.Page,
|
||||
pageSize: filter.PageSize,
|
||||
status: filter.Status,
|
||||
severity: filter.Severity,
|
||||
minConfidence: filter.MinConfidence,
|
||||
ct);
|
||||
|
||||
var summaries = findings.Select(f => _builder.Build(f)).ToList();
|
||||
|
||||
return new FindingSummaryPage
|
||||
{
|
||||
Items = summaries,
|
||||
TotalCount = totalCount,
|
||||
Page = filter.Page,
|
||||
PageSize = filter.PageSize
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Repository for finding data access.
|
||||
/// </summary>
|
||||
public interface IFindingRepository
|
||||
{
|
||||
Task<FindingData?> GetByIdAsync(Guid id, CancellationToken ct);
|
||||
Task<(IReadOnlyList<FindingData> findings, int totalCount)> GetPagedAsync(
|
||||
int page,
|
||||
int pageSize,
|
||||
string? status,
|
||||
string? severity,
|
||||
decimal? minConfidence,
|
||||
CancellationToken ct);
|
||||
}
|
||||
Reference in New Issue
Block a user