public async Task <IActionResult> Create(DeckRequestModel deckRqModel) { var userId = UserUtil.GetUserId(User); var deckSameName = await repository.Deck .QueryByName(userId, deckRqModel.Name) .AsNoTracking() .FirstOrDefaultAsync(); if (deckSameName != null) { ModelState.AddModelError("Name", "The deck name is taken."); return(BadRequest(ModelState)); } var now = DateTime.Now; var newDeck = new Deck() { Name = deckRqModel.Name.Trim(), Description = deckRqModel.Description == null || deckRqModel.Description.Trim().Length == 0 ? null : deckRqModel.Description.Trim(), Theme = deckRqModel.Theme, Completed = true, CreatedDate = now, LastModifiedDate = now, OwnerId = userId, AuthorId = userId }; repository.Deck.Create(newDeck); await repository.SaveChangesAsync(); return(CreatedAtAction(nameof(GetDeck), new { Id = newDeck.Id }, new { Message = "Created Successfully", Id = newDeck.Id })); }
public async Task <IActionResult> Update(int id, DeckRequestModel deckRqModel) { var user = await userManager.GetUser(User); var existingDeck = await repository.Deck .QueryById(user.Id, id) .FirstOrDefaultAsync(); if (existingDeck == null) { return(NotFound()); } var deckSameName = await repository.Deck .QueryByName(user.Id, deckRqModel.Name) .AsNoTracking() .FirstOrDefaultAsync(); if (deckSameName != null && deckSameName.Id != existingDeck.Id) { ModelState.AddModelError("Name", "The deck name is taken."); return(BadRequest(ModelState)); } var notChanged = true; notChanged = existingDeck.Name.ToLower() == deckRqModel.Name.Trim().ToLower() && notChanged; notChanged = existingDeck.Description?.ToLower() == deckRqModel.Description?.Trim().ToLower() && notChanged; var userIsAdmin = await userManager.CheckAdminRole(user); existingDeck.Name = deckRqModel.Name.Trim(); existingDeck.Description = deckRqModel.Description == null || deckRqModel.Description.Trim().Length == 0 ? null : deckRqModel.Description.Trim(); existingDeck.Theme = deckRqModel.Theme; existingDeck.LastModifiedDate = DateTime.Now; existingDeck.Approved = existingDeck.Approved && (userIsAdmin || notChanged); await repository.SaveChangesAsync(); return(NoContent()); }