public async Task <DeckDetail> GetDeckById(long id) { var deckResult = await _dbContext.Deck.AsNoTracking().Include(d => d.User).SingleOrDefaultAsync(d => d.Id == id); var cardResult = _dbContext.CardDetail.FromSql("EXEC usp_GetDeckCardsByDeckId @DeckId", new SqlParameter("DeckId", id)).AsNoTracking().ToList(); if (deckResult != null) { var deckDetail = DeckDetail.From(deckResult); var groupedDeckCards = cardResult.GroupBy(dt => dt.DeckType, dt => dt); foreach (var cardGroup in groupedDeckCards) { switch (cardGroup.Key.ToLower()) { case "main": deckDetail.MainDeck = cardGroup.ToList(); break; case "extra": deckDetail.ExtraDeck = cardGroup.ToList(); break; case "side": deckDetail.SideDeck = cardGroup.ToList(); break; } } return(deckDetail); } return(null); }
public static DeckDetailOutputModel From(DeckDetail model) { var deck = new DeckDetailOutputModel { Id = model.Id, Username = model.Username, ThumbnailUrl = $"/api/images/decks/{model.Id}/thumbnail", Name = model.Name, SanitizedName = string.Join("_", model.Name.Split(Path.GetInvalidFileNameChars())), Description = model.Description, YoutubeUrl = model.VideoUrl, TotalCards = model.TotalCards, Created = model.Created, Updated = model.Updated }; return(deck); }