Ejemplo n.º 1
0
        public async Task <IActionResult> UpdateAsync(Guid id, DeckUpdateModel deckUpdateModel)
        {
            var deck = await decksService.FindAsync(id);

            if (deck == null)
            {
                return(NotFound(id));
            }

            var userId = HttpContext.User.GetUserId();
            var cards  = deckUpdateModel.Cards ?? new List <CardUpdateModel>();

            foreach (var card in cards.Where(card => card.Id.HasValue))
            {
                await cardsService.UpdateOrDoNothingAsync(userId, card.Id.Value, card.Question, card.Answer);
            }

            var newCards = await Task.WhenAll(cards.Where(card => card.Id == null)
                                              .Select(newCard => cardsService.CreateAsync(userId, newCard.Question, newCard.Answer)));

            deck = await decksService.GetAsync(id);

            if (deckUpdateModel.Name != null)
            {
                deck.Name = deckUpdateModel.Name;
            }

            deck.CardsIds.AddRange(newCards.Select(card => card.Id));
            deck.CardsIds.RemoveAll(cardId => deckUpdateModel.DeleteCards?.Contains(cardId) ?? false);

            return(Ok(await decksService.UpdateAsync(deck.Id, deck)));
        }