コード例 #1
0
        public void Execute(ComicUpdateDTO request)
        {
            var comic = Context.Comics
                        .Include(c => c.Publisher)
                        .Include(c => c.Pictures)
                        .Include(c => c.ComicGenres)
                        .Include(c => c.ComicAuthors)
                        .Where(c => c.Id == request.ComicId && c.DeletedAt == null)
                        .FirstOrDefault();

            if (comic == null)
            {
                throw new EntityNotFoundException("Comic", request.ComicId);
            }

            if (request.Name != null)
            {
                if (comic.Name != request.Name)
                {
                    if (Context.Comics.Any(c => c.Name == request.Name))
                    {
                        throw new EntityAlreadyExistsException("Comic", request.Name);
                    }

                    comic.Name = request.Name;
                }
            }

            Mapper.Automap(request, comic);
            comic.UpdatedAt = DateTime.Now;

            if (request.Publisher != null)
            {
                var foundPublisher = Context.Publishers.FirstOrDefault(p => p.Id == request.Publisher && p.DeletedAt == null);
                comic.Publisher = foundPublisher ?? throw new EntityNotFoundException("Publisher", (int)request.Publisher);
            }

            if (request.ImagePath != null)
            {
                comic.Pictures.Clear();
                comic.Pictures.Add(new Picture {
                    Path = request.ImagePath, UpdatedAt = DateTime.Now
                });
            }

            if (request.Genres != null)
            {
                UpdateGenres(request, comic);
            }

            if (request.Authors != null)
            {
                UpdateAuthors(request, comic);
            }

            Context.SaveChanges();
        }
コード例 #2
0
        private void UpdateAuthors(ComicUpdateDTO request, Comic comic)
        {
            comic.ComicAuthors.Clear();
            foreach (var author in request.Authors)
            {
                var foundAuthor = Context.Authors.FirstOrDefault(a => a.Id == author && a.DeletedAt == null);
                if (foundAuthor == null)
                {
                    throw new EntityNotFoundException("Authors", author);
                }

                comic.ComicAuthors.Add(new ComicAuthors
                {
                    Comic     = comic,
                    Author    = foundAuthor,
                    UpdatedAt = DateTime.Now
                });
            }
        }
コード例 #3
0
        private void UpdateGenres(ComicUpdateDTO request, Comic comic)
        {
            comic.ComicGenres.Clear();
            foreach (var genre in request.Genres)
            {
                var foundGenre = Context.Genres.FirstOrDefault(g => g.Id == genre && g.DeletedAt == null);
                if (foundGenre == null)
                {
                    throw new EntityNotFoundException("Genres", genre);
                }

                comic.ComicGenres.Add(new ComicGenres
                {
                    Comic     = comic,
                    Genre     = foundGenre,
                    UpdatedAt = DateTime.Now
                });
            }
        }
コード例 #4
0
        public IActionResult Put(int id, [FromForm] ComicUpdateDTO comic)
        {
            if (comic.Image != null)
            {
                string extenstion = Path.GetExtension(comic.Image.FileName);
                if (!allowedFileUploadTypes.Contains(extenstion))
                {
                    return(UnprocessableEntity(new ErrorMessage {
                        Message = "Image extension is not allowed."
                    }));
                }
            }

            try
            {
                if (comic.Image != null)
                {
                    var fileName   = Guid.NewGuid().ToString() + "_" + comic.Image.FileName;
                    var uploadPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "uploads", fileName);

                    comic.Image.CopyTo(new FileStream(uploadPath, FileMode.Create));
                    comic.ImagePath = $"https://{HttpContext.Request.Host}/uploads/{fileName}";
                }

                comic.ComicId = id;
                updateCommand.Execute(comic);
                return(NoContent());
            }
            catch (EntityNotFoundException e)
            {
                return(NotFound(new ErrorMessage {
                    Message = e.Message
                }));
            }
            catch (EntityAlreadyExistsException e)
            {
                return(Conflict(new ErrorMessage {
                    Message = e.Message
                }));
            }
        }
コード例 #5
0
        public ActionResult Edit(int id, [FromForm] ComicUpdateDTO comic)
        {
            LoadData();
            LoadById(id);

            try
            {
                if (comic.Image != null)
                {
                    comic.ImagePath = UploadImage(comic.Image);
                }

                comic.ComicId = id;
                updateCommand.Execute(comic);
                return(RedirectToAction(nameof(Index)));
            }
            catch (EntityAlreadyExistsException e)
            {
                TempData["error"] = e.Message;
                return(View());
            }
            catch (EntityNotFoundException e)
            {
                TempData["error"] = e.Message;
                return(View());
            }
            catch (UnsupportedTypeException e)
            {
                TempData["error"] = e.Message;
                return(View());
            }
            catch (Exception)
            {
                TempData["error"] = "Please fill up all field in this form.";
                return(View());
            }
        }