36 lines
1.3 KiB
C#
36 lines
1.3 KiB
C#
|
|
using StellaOps.SbomService.Models;
|
|
using StellaOps.SbomService.Repositories;
|
|
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace StellaOps.SbomService.Services;
|
|
|
|
internal interface ISbomAnalysisTrigger
|
|
{
|
|
Task<SbomAnalysisJob> TriggerAsync(string artifactRef, Guid versionId, CancellationToken cancellationToken);
|
|
}
|
|
|
|
internal sealed class InMemorySbomAnalysisTrigger : ISbomAnalysisTrigger
|
|
{
|
|
private readonly ISbomLedgerRepository _repository;
|
|
private readonly IClock _clock;
|
|
private readonly IGuidProvider _guidProvider;
|
|
|
|
public InMemorySbomAnalysisTrigger(ISbomLedgerRepository repository, IClock clock, IGuidProvider? guidProvider = null)
|
|
{
|
|
_repository = repository ?? throw new ArgumentNullException(nameof(repository));
|
|
_clock = clock ?? throw new ArgumentNullException(nameof(clock));
|
|
_guidProvider = guidProvider ?? SystemGuidProvider.Instance;
|
|
}
|
|
|
|
public async Task<SbomAnalysisJob> TriggerAsync(string artifactRef, Guid versionId, CancellationToken cancellationToken)
|
|
{
|
|
var jobId = _guidProvider.NewGuid().ToString("n");
|
|
var job = new SbomAnalysisJob(jobId, artifactRef, versionId, _clock.UtcNow, "queued");
|
|
await _repository.AddAnalysisJobAsync(job, cancellationToken).ConfigureAwait(false);
|
|
return job;
|
|
}
|
|
}
|