public async Task <Deck> Update(DeckModel deckModel) { using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { await _deckCardRepository.DeleteDeckCardsByDeckId(deckModel.Id.GetValueOrDefault()); var deckSearch = await _deckRepository.GetDeckById(deckModel.Id.GetValueOrDefault()); var existingDeck = new Deck { Id = deckSearch.Id, UserId = deckSearch.UserId, Name = deckModel.Name, Description = deckModel.Description, VideoUrl = deckModel.VideoUrl, Created = deckSearch.Created, Updated = DateTime.UtcNow }; var deckTypes = (await _deckTypeRepository.AllDeckTypes()).ToDictionary(dt => dt.Name, dt => dt); var mainDeckUniqueCards = deckModel.MainDeck.Select(c => c.Id).Distinct().ToList(); var extraDeckUniqueCards = deckModel.ExtraDeck.Select(c => c.Id).Distinct().ToList(); var sideDeckUniqueCards = deckModel.SideDeck.Select(c => c.Id).Distinct().ToList(); var mainDeckCardCopies = deckModel.MainDeck.GroupBy(c => c.Id).ToDictionary(g => g.Key, g => g.Count()); var extraDeckCardCopies = deckModel.ExtraDeck.GroupBy(c => c.Id).ToDictionary(g => g.Key, g => g.Count()); var sideDeckCardCopies = deckModel.SideDeck.GroupBy(c => c.Id).ToDictionary(g => g.Key, g => g.Count()); existingDeck = await AddCardsToDeckByCardId(mainDeckUniqueCards, existingDeck, deckTypes[DeckTypeConstants.Main], mainDeckCardCopies); existingDeck = await AddCardsToDeckByCardId(extraDeckUniqueCards, existingDeck, deckTypes[DeckTypeConstants.Extra], extraDeckCardCopies); existingDeck = await AddCardsToDeckByCardId(sideDeckUniqueCards, existingDeck, deckTypes[DeckTypeConstants.Side], sideDeckCardCopies); var updateResult = await _deckRepository.Update(existingDeck); scope.Complete(); return(updateResult); } }
public async Task Given_A_DeckId_Should_Invoke_GetDeckById_Once() { // Arrange const int expected = 1; const int deckId = 23423; _deckRepository.GetDeckById(Arg.Any <long>()).Returns(new DeckDetail { Id = 23423 }); // Act await _sut.GetDeckById(deckId); // Assert await _deckRepository.Received(expected).GetDeckById(deckId); }
public async Task <DeckWithCardOverview> GetDeck(Guid id) { try { _logger.LogInformation("Getting deck {deckId}", id); var deck = await _deckRepository.GetDeckById(id); // TODO(CD): Could be worth doing this conversion when we add a card to the deck // The main issue is if it fails, either we don't add the card or we add the card with no mana symbols. // I'm not a fan of having the conversion in here, it feels like it should be in a card service but I don't // want to iterate through the ids and grab a fresh card from a card service as it defeats the purpose // of using a navigation property var cards = deck.DeckCards.Select(GetCardOverview); return(new DeckWithCardOverview(deck.Id, deck.Title, deck.Description, deck.UserId, cards)); } catch (Exception ex) { _logger.LogError(ex, "Something went wrong while retrieving deck {deckId}", id); throw new DeckServiceException($"Something went wrong while retrieving deck {id}", ex); } }
public async Task Given_A_Valid_Deck_If_Cards_Are_Found_Not_Found_Should_Return_Updated_Deck() { // Arrange var updatedDeck = new DeckModel { UserId = Guid.NewGuid().ToString(), Name = "Jinzo Deck", Description = "Machines are coming.", MainDeck = new List <CardModel> { new CardModel { Id = 34230233 }, new CardModel { Id = 34230233 }, new CardModel { Id = 34230233 }, new CardModel { Id = 99458769 }, new CardModel { Id = 99458769 }, new CardModel { Id = 99458769 } }, ExtraDeck = new List <CardModel> { new CardModel { Id = 31386180 }, new CardModel { Id = 6832966 }, new CardModel { Id = 16195942 }, new CardModel { Id = 84013237 }, new CardModel { Id = 94380860 }, }, SideDeck = new List <CardModel>() }; _deckTypeRepository.AllDeckTypes().Returns(new List <DeckType> { new DeckType { Id = 23424, Name = "Main", }, new DeckType { Id = 23424, Name = "Extra", }, new DeckType { Id = 23424, Name = "Side", } }); _deckRepository.GetDeckById(Arg.Any <long>()).Returns(new DeckDetail { Id = 2342342, UserId = Guid.NewGuid().ToString(), Created = DateTime.Now }); _deckRepository.Update(Arg.Any <Deck>()).Returns(new Deck()); // Act var result = await _sut.Update(updatedDeck); // Assert result.Should().NotBeNull(); }
public IActionResult DeckList(int deckId) { var deck = _deckRepository.GetDeckById(deckId); return(View(deck)); }