Files
git.stella-ops.org/src/__Libraries/StellaOps.Verdict/Persistence/VerdictRow.cs

85 lines
2.3 KiB
C#

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace StellaOps.Verdict.Persistence;
/// <summary>
/// Database entity for verdict storage.
/// </summary>
[Table("verdicts", Schema = "stellaops")]
public sealed class VerdictRow
{
[Column("verdict_id")]
public required string VerdictId { get; set; }
[Column("tenant_id")]
public Guid TenantId { get; set; }
// Subject fields
[Column("subject_purl")]
public required string SubjectPurl { get; set; }
[Column("subject_cve_id")]
public required string SubjectCveId { get; set; }
[Column("subject_component_name")]
public string? SubjectComponentName { get; set; }
[Column("subject_component_version")]
public string? SubjectComponentVersion { get; set; }
[Column("subject_image_digest")]
public string? SubjectImageDigest { get; set; }
[Column("subject_digest")]
public string? SubjectDigest { get; set; }
// Claim fields
[Column("claim_status")]
public required string ClaimStatus { get; set; }
[Column("claim_confidence")]
public decimal? ClaimConfidence { get; set; }
[Column("claim_vex_status")]
public string? ClaimVexStatus { get; set; }
// Result fields
[Column("result_disposition")]
public required string ResultDisposition { get; set; }
[Column("result_score")]
public decimal? ResultScore { get; set; }
[Column("result_matched_rule")]
public string? ResultMatchedRule { get; set; }
[Column("result_quiet")]
public bool ResultQuiet { get; set; }
// Provenance fields
[Column("provenance_generator")]
public required string ProvenanceGenerator { get; set; }
[Column("provenance_run_id")]
public string? ProvenanceRunId { get; set; }
[Column("provenance_policy_bundle_id")]
public string? ProvenancePolicyBundleId { get; set; }
// Inputs hash
[Column("inputs_hash")]
public required string InputsHash { get; set; }
// Full JSON
[Column("verdict_json", TypeName = "jsonb")]
public required string VerdictJson { get; set; }
// Timestamps
[Column("created_at")]
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
[Column("expires_at")]
public DateTimeOffset? ExpiresAt { get; set; }
}