public async Task <ActionResult> CreateDeck(string name)
        {
            var deck = new Deck(name);

            try
            {
                var deckInMemory = _deckBuilder.CreateDeck();
                await _deckRepository.AddAsync(deck);

                await _deckRepository.Context.SaveChangesAsync();

                var i     = 1;
                var toAdd = new List <CardInDeck>();
                foreach (var cardInMemory in deckInMemory)
                {
                    var card = await _cardRepository.FirstAsync(x =>
                                                                x.Suit == cardInMemory.Suit && x.Rank == cardInMemory.Rank);

                    toAdd.Add(new CardInDeck {
                        CardId = card.Key, DeckId = deck.Key, NumberInDeck = i
                    });
                    i++;
                }

                await _cardInDeckRepository.AddRangeAsync(toAdd);

                await _cardInDeckRepository.Context.SaveChangesAsync();

                return(Ok());
            }
            catch (DbUpdateException)
            {
                return(base.BadRequest($"Deck {name} already exist"));
            }
            catch (Exception)
            {
                await _deckRepository.RemoveAsync(deck);

                return(StatusCode(StatusCodes.Status500InternalServerError, "Sorry"));
            }
        }
Пример #2
0
        public async Task <IActionResult> CreateDeck([FromForm] CreationDeckDto dto)
        {
            if (!ModelState.IsValid)
            {
                return(UnprocessableEntity(ModelState));
            }

            var user = (await GetCurrentUser()) !;

            var dbo = mapper.Map(dto, new DeckDbo
            {
                Author = user
            });

            dbo.ImagePath = await ImageStore.SaveImage(dto.Image?.OpenReadStream(),
                                                       '.' + dto.Image?.FileName.Split('.')[1]);

            dbo = await deckRepo.AddAsync(dbo);

            return(CreatedAtRoute(nameof(GetDeckById), new { deckId = dbo.Id }, mapper.Map <DeckDbo, DeckResult>(dbo)));
        }