61 lines
2.1 KiB
C#
61 lines
2.1 KiB
C#
// -----------------------------------------------------------------------------
|
|
// PostgresArtifactIndexRepository.Mutate.cs
|
|
// Sprint: SPRINT_20260118_017_Evidence_artifact_store_unification
|
|
// Task: AS-003 - Create ArtifactStore PostgreSQL index
|
|
// Description: Mutation operations for the artifact repository
|
|
// -----------------------------------------------------------------------------
|
|
namespace StellaOps.Artifact.Infrastructure;
|
|
|
|
public sealed partial class PostgresArtifactIndexRepository
|
|
{
|
|
/// <inheritdoc />
|
|
public async Task<ArtifactIndexEntry?> GetAsync(
|
|
string bomRef,
|
|
string serialNumber,
|
|
string artifactId,
|
|
CancellationToken ct = default)
|
|
{
|
|
var results = await QueryAsync(_tenantKey, ArtifactIndexSql.SelectByKey, cmd =>
|
|
{
|
|
AddParameter(cmd, "tenant_id", _tenantId);
|
|
AddParameter(cmd, "bom_ref", bomRef);
|
|
AddParameter(cmd, "serial_number", serialNumber);
|
|
AddParameter(cmd, "artifact_id", artifactId);
|
|
}, MapEntry, ct).ConfigureAwait(false);
|
|
|
|
return results.Count > 0 ? results[0] : null;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public async Task<bool> RemoveAsync(
|
|
string bomRef,
|
|
string serialNumber,
|
|
string artifactId,
|
|
CancellationToken ct = default)
|
|
{
|
|
var rowsAffected = await ExecuteAsync(_tenantKey, ArtifactIndexSql.UpdateSoftDelete, cmd =>
|
|
{
|
|
AddParameter(cmd, "tenant_id", _tenantId);
|
|
AddParameter(cmd, "bom_ref", bomRef);
|
|
AddParameter(cmd, "serial_number", serialNumber);
|
|
AddParameter(cmd, "artifact_id", artifactId);
|
|
}, ct).ConfigureAwait(false);
|
|
|
|
return rowsAffected > 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Counts artifacts for a tenant.
|
|
/// </summary>
|
|
public async Task<int> CountAsync(Guid tenantId, CancellationToken ct = default)
|
|
{
|
|
var tenantKey = tenantId.ToString("D");
|
|
var result = await ExecuteScalarAsync<long>(tenantKey, ArtifactIndexSql.CountByTenant, cmd =>
|
|
{
|
|
AddParameter(cmd, "tenant_id", tenantId);
|
|
}, ct).ConfigureAwait(false);
|
|
|
|
return (int)result;
|
|
}
|
|
}
|