Files
git.stella-ops.org/src/SbomService/StellaOps.SbomService/Services/SbomAnalysisTrigger.cs
2026-02-01 21:37:40 +02:00

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;
}
}