public async Task <IActionResult> AddTag(CardEditorModel model) { var user = await _userManager.GetUserAsync(User); var deck = await _context.Decks.FindAsync(model.DeckId); if (deck.CreatorId == user.Id && !String.IsNullOrEmpty(model.TagInput)) { var card = await _context.Cards .Where(card => card.Id == model.Id) .Include(card => card.Tags) .FirstOrDefaultAsync(); string tagName = model.TagInput .ToLower() .Split(' ') .Aggregate((x, y) => x += "_" + y); var tag = await _context.CardTags.FindAsync(tagName); if (tag is null) { tag = new CardTag { Name = tagName }; await _context.CardTags.AddAsync(tag); } card.Tags.Add(tag); _context.Cards.Update(card); await _context.SaveChangesAsync(); } return(RedirectToAction(nameof(EditCard), new { deckId = model.DeckId, cardId = model.Id })); }
public async Task <IActionResult> EditCard(long deckId, long cardId = 0) { var user = await _userManager.GetUserAsync(User); var deck = await _context.Decks.FindAsync(deckId); var card = await _context.Cards .Where(card => card.Id == cardId) .Include(card => card.Tags) .FirstOrDefaultAsync(); string errors = TempData["ErrorMessage"] as string; string[] errorsArray = Array.Empty <string>(); if (errors is not null) { errorsArray = errors.Split(", "); } if (user.Id == deck.CreatorId) { if (card is null) { var returnModel = new CardEditorModel { Username = (await _userManager.GetUserAsync(User)).UserName, DeckId = deck.Id, Tags = new List <TagModel>(), Errors = errorsArray, }; TempData["ErrorMessage"] = null; return(View(returnModel)); } else { var returnModel = new CardEditorModel { Username = (await _userManager.GetUserAsync(User)).UserName, DeckId = deck.Id, Id = card.Id, Word = card.Word, Transcription = card.Transcription, Description = card.Description, Difficulty = card.Difficulty, Tags = card.Tags.Select(tag => new TagModel { Name = tag.Name }).ToList(), Errors = errorsArray, }; TempData["ErrorMessage"] = null; return(View(returnModel)); } } return(BadRequest()); }
public IActionResult EditCard([FromRoute] long deckId, [FromForm] CardEditorModel model) => RedirectToAction(nameof(EditCard), new { deckId, cardId = model.Id });
public async Task <IActionResult> SaveChanges(CardEditorModel model) { if (ModelState.IsValid) { var deck = await _context.Decks .Where(deck => deck.Id == model.DeckId) .Include(deck => deck.Cards) .FirstOrDefaultAsync(); Card card; long returnCardId = 0; if (model.ExistingId == 0) { card = deck.Cards .Where(card => card.Id == model.Id) .FirstOrDefault(); } else { card = await _context.Cards .Where(card => card.Id == model.ExistingId) .FirstOrDefaultAsync(); } if (deck is not null) { if (card is not null) { using (var ms = new MemoryStream()) { if (model.Image is not null) { model.Image.CopyTo(ms); card.Image = ms.ToArray(); } else if (model.ImageRemoved) { card.Image = null; } } card.Word = model.Word; card.Description = model.Description; card.Transcription = model.Transcription; card.Difficulty = model.Difficulty; if (model.ExistingId == 0) { _context.Cards.Update(card); returnCardId = card.Id; } else { var newCard = new Card { Word = card.Word, Description = card.Description, Transcription = card.Transcription, Difficulty = card.Difficulty, Image = card.Image, }; deck.Cards.Add(newCard); deck.CardNumber++; _context.Decks.Update(deck); await _context.SaveChangesAsync(); returnCardId = newCard.Id; } } else { card = new Card { Word = model.Word, Description = model.Description, Transcription = model.Transcription, Difficulty = model.Difficulty, }; using (var ms = new MemoryStream()) { if (model.Image is not null) { model.Image.CopyTo(ms); card.Image = ms.ToArray(); } else if (model.ImageRemoved) { card.Image = null; } } deck.Cards.Add(card); deck.CardNumber++; _context.Decks.Update(deck); await _context.SaveChangesAsync(); returnCardId = card.Id; } await _context.SaveChangesAsync(); } TempData["ErrorMessage"] = ""; return(RedirectToAction(nameof(EditCard), new { deckId = model.DeckId, cardId = returnCardId })); } TempData["ErrorMessage"] = ModelState.Values .Where(x => x.Errors.Count > 0) .Select(x => x.Errors[0].ErrorMessage) .Aggregate((x, y) => x + ", " + y); return(RedirectToAction(nameof(EditCard), new { deckId = model.DeckId, cardId = model.Id })); }