using Microsoft.EntityFrameworkCore; using SVSim.Database.Models; namespace SVSim.Database.Repositories.Globals; public class GlobalsRepository : IGlobalsRepository { private readonly SVSimDbContext _dbContext; public GlobalsRepository(SVSimDbContext dbContext) { _dbContext = dbContext; } public async Task> GetClassExpCurve() { return await _dbContext.Set().ToListAsync(); } public async Task> GetBattlefields(bool onlyOpen) { return await _dbContext.Set().Where(bf => !onlyOpen || bf.IsOpen).ToListAsync(); } public async Task> GetRankInfo() { return await _dbContext.Set().ToListAsync(); } // ---------- Prod-captured globals ---------- public Task> GetMyRotationSettings() => _dbContext.MyRotationSettings.AsNoTracking().ToListAsync(); public Task> GetMyRotationAbilities() => _dbContext.MyRotationAbilities.AsNoTracking().ToListAsync(); public Task> GetAvatarAbilities() => _dbContext.AvatarAbilities.AsNoTracking().ToListAsync(); public Task> GetDefaultDecks() => _dbContext.DefaultDecks.AsNoTracking().ToListAsync(); public Task GetCurrentArenaSeason() => _dbContext.ArenaSeasons.AsNoTracking().FirstOrDefaultAsync(e => e.Id == 1); public Task> GetSpotCards() => _dbContext.SpotCards.AsNoTracking().ToListAsync(); public Task> GetReprintedCards() => _dbContext.ReprintedCards.AsNoTracking().ToListAsync(); public Task> GetUnlimitedRestrictions() => _dbContext.UnlimitedRestrictions.AsNoTracking().ToListAsync(); public Task> GetLoadingExclusionCards() => _dbContext.LoadingExclusionCards.AsNoTracking().ToListAsync(); public Task> GetBattlePassLevels() => _dbContext.BattlePassLevels.AsNoTracking().ToListAsync(); public Task> GetDailyLoginBonus() => _dbContext.DailyLoginBonuses.AsNoTracking().ToListAsync(); public Task> GetBanners() => _dbContext.Banners.AsNoTracking().OrderBy(b => b.Id).ToListAsync(); public Task GetCurrentColosseum() => _dbContext.Colosseums.AsNoTracking().FirstOrDefaultAsync(e => e.Id == 1); public Task GetCurrentSealedSeason() => _dbContext.SealedSeasons.AsNoTracking().FirstOrDefaultAsync(e => e.Id == 1); /// Returns the master-point ranking period whose EndTime is in the future, or the latest by EndTime as fallback. public async Task GetCurrentMasterPointPeriod() { var now = DateTime.UtcNow; return await _dbContext.MasterPointRankingPeriods.AsNoTracking() .Where(p => p.EndTime >= now) .OrderBy(p => p.EndTime) .FirstOrDefaultAsync() ?? await _dbContext.MasterPointRankingPeriods.AsNoTracking() .OrderByDescending(p => p.EndTime) .FirstOrDefaultAsync(); } public Task> GetActiveSpecialDeckFormats() => _dbContext.SpecialDeckFormats.AsNoTracking().OrderBy(e => e.Id).ToListAsync(); public Task> GetPaymentItems() => _dbContext.PaymentItems.AsNoTracking().OrderBy(e => e.Id).ToListAsync(); public Task> GetMaintenanceCards() => _dbContext.MaintenanceCards.AsNoTracking().ToListAsync(); public Task> GetFeatureMaintenances() => _dbContext.FeatureMaintenances.AsNoTracking().ToListAsync(); public Task GetPreReleaseInfo() => _dbContext.PreReleaseInfos.AsNoTracking().FirstOrDefaultAsync(e => e.Id == 1); public Task> GetRotationCardSets() => _dbContext.CardSets.AsNoTracking().Where(s => s.IsInRotation).ToListAsync(); public Task> GetPracticeOpponents() => _dbContext.PracticeOpponents.AsNoTracking().OrderBy(e => e.ClassId).ThenBy(e => e.Id).ToListAsync(); public Task> GetBotRoster() => _dbContext.BotRoster.AsNoTracking().OrderBy(e => e.ClassId).ThenBy(e => e.Id).ToListAsync(); }