Deck list work
This commit is contained in:
@@ -28,6 +28,27 @@ public class DeckRepository : IDeckRepository
|
||||
?? new List<ShadowverseDeckEntry>();
|
||||
}
|
||||
|
||||
public async Task<Dictionary<Format, List<ShadowverseDeckEntry>>> GetDecksByFormats(long viewerId, IEnumerable<Format> formats)
|
||||
{
|
||||
var requested = formats.ToHashSet();
|
||||
var viewer = await _dbContext.Viewers
|
||||
.AsNoTracking()
|
||||
.Include(v => v.Decks).ThenInclude(d => d.Class)
|
||||
.Include(v => v.Decks).ThenInclude(d => d.Sleeve)
|
||||
.Include(v => v.Decks).ThenInclude(d => d.LeaderSkin)
|
||||
.FirstOrDefaultAsync(v => v.Id == viewerId);
|
||||
|
||||
// Seed every requested format with an empty list so callers iterate without null checks.
|
||||
var result = requested.ToDictionary(f => f, _ => new List<ShadowverseDeckEntry>());
|
||||
if (viewer is null) return result;
|
||||
|
||||
foreach (var deck in viewer.Decks.Where(d => requested.Contains(d.Format)).OrderBy(d => d.Number))
|
||||
{
|
||||
result[deck.Format].Add(deck);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<ShadowverseDeckEntry?> GetDeck(long viewerId, Format format, int deckNo)
|
||||
{
|
||||
var viewer = await _dbContext.Viewers
|
||||
|
||||
@@ -6,6 +6,14 @@ namespace SVSim.Database.Repositories.Deck;
|
||||
public interface IDeckRepository
|
||||
{
|
||||
Task<List<ShadowverseDeckEntry>> GetDecks(long viewerId, Format format);
|
||||
|
||||
/// <summary>
|
||||
/// Bulk-fetch viewer decks grouped by format. Returns a dict keyed by every format in
|
||||
/// <paramref name="formats"/> — missing formats map to empty lists so callers don't need
|
||||
/// dict-existence checks. Single viewer-load, no N+1.
|
||||
/// </summary>
|
||||
Task<Dictionary<Format, List<ShadowverseDeckEntry>>> GetDecksByFormats(long viewerId, IEnumerable<Format> formats);
|
||||
|
||||
Task<ShadowverseDeckEntry?> GetDeck(long viewerId, Format format, int deckNo);
|
||||
Task<int> GetEmptyDeckNumber(long viewerId, Format format);
|
||||
Task<ShadowverseDeckEntry> UpsertDeck(long viewerId, Format format, int deckNo, Action<ShadowverseDeckEntry> mutate);
|
||||
|
||||
@@ -94,6 +94,12 @@ public class GlobalsRepository : IGlobalsRepository
|
||||
.FirstOrDefaultAsync();
|
||||
}
|
||||
|
||||
public Task<List<SpecialDeckFormatEntry>> GetActiveSpecialDeckFormats() =>
|
||||
_dbContext.SpecialDeckFormats.AsNoTracking().OrderBy(e => e.Id).ToListAsync();
|
||||
|
||||
public Task<List<PaymentItemEntry>> GetPaymentItems() =>
|
||||
_dbContext.PaymentItems.AsNoTracking().OrderBy(e => e.Id).ToListAsync();
|
||||
|
||||
public Task<List<MaintenanceCardEntry>> GetMaintenanceCards() =>
|
||||
_dbContext.MaintenanceCards.AsNoTracking().ToListAsync();
|
||||
|
||||
|
||||
@@ -26,6 +26,8 @@ public interface IGlobalsRepository
|
||||
Task<ColosseumConfig?> GetCurrentColosseum();
|
||||
Task<SealedConfig?> GetCurrentSealedSeason();
|
||||
Task<MasterPointRankingPeriodEntry?> GetCurrentMasterPointPeriod();
|
||||
Task<List<SpecialDeckFormatEntry>> GetActiveSpecialDeckFormats();
|
||||
Task<List<PaymentItemEntry>> GetPaymentItems();
|
||||
Task<List<MaintenanceCardEntry>> GetMaintenanceCards();
|
||||
Task<List<FeatureMaintenanceEntry>> GetFeatureMaintenances();
|
||||
Task<PreReleaseInfo?> GetPreReleaseInfo();
|
||||
|
||||
Reference in New Issue
Block a user