using Microsoft.EntityFrameworkCore; namespace SVSim.Database.Models; /// /// Per-viewer, per-pack open counter. Owned collection on . /// PackId = parent_gacha_id. LastDailyFreeAt is null until the viewer first opens /// a DAILY (type_detail=3) child gacha; thereafter the controller compares it against the daily /// reset boundary to decide whether the free open is available again. /// [Owned] public class ViewerPackOpenCount { public int PackId { get; set; } public int OpenCount { get; set; } public DateTime? LastDailyFreeAt { get; set; } }