using SVSim.Database.Models; namespace SVSim.Database.Repositories.BattlePass; public interface IBattlePassRepository { /// /// Active season for the given moment (StartDate <= when < EndDate). Returns null /// if none. If multiple match (overlap), the most recently started wins. /// Task GetActiveSeasonAsync(DateTimeOffset when, CancellationToken ct); /// /// Season by id (no time-window filter). Used by /battle_pass/buy to validate request.season_id. /// Task GetSeasonAsync(int seasonId, CancellationToken ct); /// /// All rewards for a season, both tracks. Sorted by (Track, Level) for deterministic wire order. /// Task> GetSeasonRewardsAsync(int seasonId, CancellationToken ct); /// /// Global level curve. Cached after first load. /// Task> GetLevelCurveAsync(CancellationToken ct); }