public async Task <IActionResult> UpdateSticker([FromRoute] long id, EditStickerViewModel viewModel) { if (!ModelState.IsValid) { throw new Exception("Not valid"); } var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value; var user = _dbContext.Users.First(m => m.Id == userId); var sticker = _dbContext.Stickers.Include(m => m.StickerTags).ThenInclude(m => m.Tag).FirstOrDefault(m => m.Id == id && m.User.Id == userId); if (sticker == null) { return(NotFound()); } if (string.IsNullOrEmpty(viewModel.Title)) { return(BadRequest()); } if (string.IsNullOrEmpty(viewModel.Description)) { return(BadRequest()); } if (viewModel.Height <= 0) { return(BadRequest()); } if (viewModel.Width <= 0) { return(BadRequest()); } if (viewModel.Quantity <= 0) { return(BadRequest()); } if (viewModel.Credits <= 0) { return(BadRequest()); } var tags = viewModel.Tags.Split(',').Select(m => m.ToLower()); var existingTags = _dbContext.Tags.Where(m => tags.Contains(m.Name)); var newTags = new List <Tag>(); foreach (var tag in tags.Where(m => !existingTags.Any(x => x.Name.Equals(m)))) { var newTag = new Tag { Name = tag }; newTags.Add(newTag); _dbContext.Add(newTag); } var allTags = existingTags.Concat(newTags); if (viewModel.Quantity > 0) { user.Credits += viewModel.Quantity - sticker.Quantity; } sticker.Height = viewModel.Height; sticker.Width = viewModel.Width; sticker.Description = viewModel.Description; sticker.Title = viewModel.Title; sticker.Quantity = viewModel.Quantity; sticker.Credits = viewModel.Credits; if (viewModel.Image != null) { sticker.BlobMediaType = viewModel.Image.ContentType; using (var memoryStream = new MemoryStream()) { await viewModel.Image.CopyToAsync(memoryStream); sticker.Blob = memoryStream.ToArray(); } ResizeImage(sticker); } _dbContext.StickerTags.RemoveRange(sticker.StickerTags); foreach (var tag in allTags) { var stickerTag = new StickerTag { Tag = tag, Sticker = sticker }; _dbContext.Add(stickerTag); } await _dbContext.SaveChangesAsync(); return(RedirectToAction("Index", new { id = sticker.Id })); }
public async Task <IActionResult> Create(CreateStickerViewModel viewModel) { if (!ModelState.IsValid) { throw new Exception("Not Valid"); } var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value; var user = _dbContext.Users.First(m => m.Id == userId); if (string.IsNullOrEmpty(viewModel.Title)) { return(BadRequest()); } if (string.IsNullOrEmpty(viewModel.Description)) { return(BadRequest()); } if (viewModel.Height <= 0) { return(BadRequest()); } if (viewModel.Width <= 0) { return(BadRequest()); } if (viewModel.Quantity <= 0) { return(BadRequest()); } if (viewModel.Credits <= 0) { return(BadRequest()); } var tags = viewModel.Tags.Split(',').Select(m => m.ToLower()); var existingTags = _dbContext.Tags.Where(m => tags.Contains(m.Name)); var newTags = new List <Tag>(); foreach (var tag in tags.Where(m => !existingTags.Any(x => x.Name.Equals(m)))) { var newTag = new Tag { Name = tag }; newTags.Add(newTag); _dbContext.Add(newTag); } var allTags = existingTags.Concat(newTags); var product = new Sticker { Created = DateTime.UtcNow, Description = viewModel.Description, Title = viewModel.Title, Height = viewModel.Height, Width = viewModel.Width, Quantity = viewModel.Quantity, Credits = viewModel.Credits, User = user, BlobMediaType = viewModel.Image.ContentType }; user.Credits += viewModel.Quantity; using (var memoryStream = new MemoryStream()) { await viewModel.Image.CopyToAsync(memoryStream); product.Blob = memoryStream.ToArray(); ResizeImage(product); } _dbContext.Add(product); foreach (var tag in allTags) { var stickerTag = new StickerTag { Tag = tag, Sticker = product }; _dbContext.Add(stickerTag); } await _dbContext.SaveChangesAsync(); return(RedirectToAction("Index", new { id = product.Id })); }