// -----------------------------------------------------------------------------
// ISbomRegistryRepository.cs
// Sprint: SPRINT_8200_0013_0003_SCAN_sbom_intersection_scoring
// Task: SBOM-8200-001
// Description: Repository interface for SBOM registry persistence
// -----------------------------------------------------------------------------
using StellaOps.Concelier.SbomIntegration.Models;
namespace StellaOps.Concelier.SbomIntegration;
///
/// Repository for SBOM registration persistence.
///
public interface ISbomRegistryRepository
{
#region Registration CRUD
///
/// Saves or updates an SBOM registration.
///
Task SaveAsync(SbomRegistration registration, CancellationToken cancellationToken = default);
///
/// Gets an SBOM registration by digest.
///
Task GetByDigestAsync(string digest, CancellationToken cancellationToken = default);
///
/// Gets an SBOM registration by ID.
///
Task GetByIdAsync(Guid id, CancellationToken cancellationToken = default);
///
/// Lists registrations with pagination.
///
Task> ListAsync(
int offset,
int limit,
string? tenantId = null,
CancellationToken cancellationToken = default);
///
/// Deletes an SBOM registration by digest.
///
Task DeleteAsync(string digest, CancellationToken cancellationToken = default);
///
/// Counts total registrations.
///
Task CountAsync(string? tenantId = null, CancellationToken cancellationToken = default);
#endregion
#region Match CRUD
///
/// Saves SBOM matches (replaces existing).
///
Task SaveMatchesAsync(
Guid sbomId,
IEnumerable matches,
CancellationToken cancellationToken = default);
///
/// Gets matches for an SBOM.
///
Task> GetMatchesAsync(
string digest,
CancellationToken cancellationToken = default);
///
/// Gets matches for a canonical advisory.
///
Task> GetMatchesByCanonicalAsync(
Guid canonicalId,
CancellationToken cancellationToken = default);
///
/// Deletes all matches for an SBOM.
///
Task DeleteMatchesAsync(Guid sbomId, CancellationToken cancellationToken = default);
#endregion
#region Statistics
///
/// Gets registry statistics.
///
Task GetStatsAsync(
string? tenantId = null,
CancellationToken cancellationToken = default);
///
/// Updates affected count for an SBOM.
///
Task UpdateAffectedCountAsync(
string digest,
int affectedCount,
CancellationToken cancellationToken = default);
///
/// Updates last matched timestamp.
///
Task UpdateLastMatchedAsync(
string digest,
DateTimeOffset lastMatched,
CancellationToken cancellationToken = default);
///
/// Updates the PURL list for an SBOM.
///
Task UpdatePurlsAsync(
string digest,
IReadOnlyList purls,
CancellationToken cancellationToken = default);
#endregion
}