Пример #1
0
        async Task IDeckService.UpdateCollectionAsync(int id, int userId, IEnumerable <int> cardCollectionIds, CancellationToken cancellationToken)
        {
            var deck = await _deckRepository.GetDeckByIdAsync(id, userId, cancellationToken : cancellationToken);

            if (deck == null)
            {
                throw new InvalidDeckException("You do not have access to this deck.");
            }

            if (deck.UserId != userId)
            {
                throw new InvalidDeckException("You do not have access to this deck.");
            }

            var distincted = (cardCollectionIds ?? Array.Empty <int>()).Distinct().ToArray();

            if (distincted.Length > deck.MaxCards)
            {
                throw new InvalidDeckException("Over maximum number of cards added.");
            }

            var cardCollectionResults = await _cardCollectionRepository.FindCardCollectionsAsync(
                new Data.Abstractions.CardCollectionSearchFilter
            {
                Ids    = distincted,
                UserId = userId,
            },
                cancellationToken : cancellationToken
                );

            var ownedCount = cardCollectionResults.TotalCount;

            if (ownedCount != distincted.Length)
            {
                throw new InvalidCardException("You do not own some of the cards.");
            }

            var deckUpdate = new DeckUpdateData
            {
                CardCollectionIds = distincted,
            };

            await _deckRepository.UpdateDeckAsync(id, deckUpdate, cancellationToken : cancellationToken);
        }
Пример #2
0
        private async Task <Abstractions.SearchResult <CardCollectionModel> > GetCardCollectionInternalAsync(Abstractions.CardCollectionSearchFilter filter, CancellationToken cancellationToken)
        {
            var cardCollections = await _cardCollectionRepository.FindCardCollectionsAsync(
                new Data.Abstractions.CardCollectionSearchFilter
            {
                CardName = filter.Name,
                Ids      = filter.Ids?.ToArray(),
                UserId   = filter.UserId,
            },
                cancellationToken : cancellationToken
                );

            var results = cardCollections.Results.Select(_cardCollectionDataMapper.Map).ToArray();

            var cardIds = results.Select(x => x.CardId).ToArray();

            var cardResults = await _cardRepository.FindCardsAsync(
                new Data.Abstractions.CardSearchFilter
            {
                Ids    = cardIds,
                UserId = filter.UserId,
            },
                cancellationToken : cancellationToken
                );

            var cards = cardResults.Results;

            foreach (var res in results)
            {
                res.Card = cards.FirstOrDefault(x => x.Id == res.CardId);
            }

            return(new Abstractions.SearchResult <CardCollectionModel>
            {
                Count = cardCollections.TotalCount,
                Results = results,
            });
        }