Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 5
0
        public IActionResult DeckList(int deckId)
        {
            var deck = _deckRepository.GetDeckById(deckId);

            return(View(deck));
        }