Beispiel #1
0
        public IActionResult Update([FromRoute] long id)
        {
            var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;

            var sticker = _dbContext.Stickers.Include(m => m.StickerTags).ThenInclude(m => m.Tag).FirstOrDefault(m => m.User.Id == userId && m.Id == id);

            if (sticker == null)
            {
                return(NotFound());
            }

            var tags = string.Empty;

            if (sticker.StickerTags.Any())
            {
                tags = sticker.StickerTags.Select(m => m.Tag.Name).Aggregate((x, y) => x + "," + y);
            }

            var viewModel = new EditStickerViewModel
            {
                Id          = sticker.Id,
                Credits     = sticker.Credits,
                Description = sticker.Description,
                Height      = sticker.Height,
                Width       = sticker.Width,
                Quantity    = sticker.Quantity,
                Title       = sticker.Title,
                Tags        = tags
            };

            return(View("Edit", viewModel));
        }
Beispiel #2
0
        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 }));
        }