public async Task <ListPileResponse> Get(string deckId, string pileName) { var deck = await repository.GetDeckAsync(deckId); var response = new ListPileResponse() { DeckId = deckId, Remaining = deck.Remaining }; var piles = new Dictionary <string, IPileInfo>(); foreach (var p in deck.Piles) { IPileInfo pileInfo; if (p.Name == pileName) { pileInfo = new PileInfo() { Remaining = p.Remaining }; foreach (var c in p.Cards) { var cardInfo = new CardInfo() { Code = c.Code, Suit = c.Suit, Value = c.Value }; ((PileInfo)pileInfo).Cards.Add(cardInfo); } } else { pileInfo = new ShortPileInfo() { Remaining = p.Remaining }; } piles.Add(p.Name, pileInfo); } response.Piles = piles; return(response); }