42 lines
1.3 KiB
C#
42 lines
1.3 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using SVSim.Database;
|
|
using SVSim.Database.Enums;
|
|
using SVSim.Database.Models;
|
|
|
|
namespace SVSim.EmulatedEntrypoint.Services;
|
|
|
|
public class DbCardPoolProvider : ICardPoolProvider
|
|
{
|
|
private readonly SVSimDbContext _db;
|
|
public DbCardPoolProvider(SVSimDbContext db) { _db = db; }
|
|
|
|
public IReadOnlyList<ShadowverseCardEntry> GetPool(PackConfigEntry pack)
|
|
{
|
|
switch (pack.PackCategory)
|
|
{
|
|
case PackCategory.None:
|
|
case PackCategory.LegendCardPack:
|
|
return _db.CardSets
|
|
.Where(s => s.Id == pack.BasePackId)
|
|
.SelectMany(s => s.Cards)
|
|
.Where(c => !c.IsFoil)
|
|
.ToList();
|
|
|
|
case PackCategory.SpecialCardPack:
|
|
case PackCategory.LimitedSpecialCardPack:
|
|
return _db.CardSets
|
|
.Where(s => s.IsInRotation)
|
|
.SelectMany(s => s.Cards)
|
|
.Where(c => !c.IsFoil)
|
|
.Distinct()
|
|
.ToList();
|
|
|
|
default:
|
|
return Array.Empty<ShadowverseCardEntry>();
|
|
}
|
|
}
|
|
|
|
public ShadowverseCardEntry? TryGetFoilTwin(long baseCardId) =>
|
|
_db.Cards.FirstOrDefault(c => c.Id == baseCardId + 1 && c.IsFoil);
|
|
}
|