namespace SVSim.Database.Models; /// /// One row per (viewer, exchanged card). Composite PK (ViewerId, CardId). Standalone table /// (not a Viewer owned collection) to avoid cartesian-explode on viewer-graph reads. /// snapshot at exchange time so the pre-release counter can be /// computed without joining back to (and to survive /// catalog edits that re-classify a card). /// public class ViewerSpotCardExchange { public long ViewerId { get; set; } public long CardId { get; set; } public bool IsPreRelease { get; set; } public DateTime ExchangedAt { get; set; } }