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")); } }
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))); }