85 lines
2.3 KiB
C#
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; }
|
|
}
|