Beispiel #1
0
        public async Task <ActionResult> EditMovie(EditMovieSetViewModel model)
        {
            if (User.Identity.Name != model.UploaderName)
            {
                return(RedirectToAction("GetMovieList"));
            }

            if (ModelState.IsValid)
            {
                try
                {
                    var id = await _movieService.UpdateAsync(model, User.Identity.Name);

                    return(RedirectToActionPermanent("GetMovie", new { id }));
                }
                catch (Exception e)
                {
                    ViewData["Error"] = e.Message;
                    return(View("MovieError"));
                }
            }

            return(View());
        }
Beispiel #2
0
        /// <summary>
        /// Редактирование данных фильма в БД
        /// </summary>
        /// <param name="model"></param>
        /// <param name="userName"></param>
        /// <returns></returns>
        public async Task <long> UpdateAsync(EditMovieSetViewModel model, string userName)
        {
            // Проверка, имеется ли данный режиссер в БД, если нет - сохраняется
            var director = await _context.Directors
                           .FirstOrDefaultAsync(d => d.Name.ToLower().Trim() == model.DirectorName.ToLower().Trim());

            if (director == null)
            {
                director = new Director()
                {
                    Name = model.DirectorName.FormatAsName()
                };
                _context.Directors.Add(director);
                await _context.SaveChangesAsync();
            }

            // Проверка есть ли в БД фильм с таким названием, но другим идентификатором
            var movie = await _context.Movies
                        .FirstOrDefaultAsync(m => m.Id != model.Id &&
                                             m.Name.ToLower().Trim() == model.Name.ToLower().Trim());

            if (movie != null)
            {
                throw new Exception("Фильм с таким названием уже существует");
            }

            // Поиск фильма с таким идентификатором в БД
            movie = await _context.Movies
                    .FirstOrDefaultAsync(m => m.Id == model.Id);

            if (movie == null)
            {
                throw new Exception("Фильм отсутствует в библиотеке");
            }

            // Проверка наличия пользователя в БД
            var user = await _context.Users.FirstOrDefaultAsync(u => u.UserName == userName);

            if (user == null)
            {
                throw new Exception("Пользователь не найден");
            }

            // Перевод файла постера в набор байт
            byte[] poster = new byte[model.Poster.ContentLength];
            using (var stream = model.Poster.InputStream)
            {
                stream.Read(poster, 0, (int)stream.Length);
            }

            // Сохранение изменений в БД
            movie.Name        = model.Name.FormatAsName();
            movie.Description = model.Description;
            movie.ReleaseDate = model.ReleaseYear;
            movie.Director    = director;
            movie.Uploader    = user;
            movie.Poster      = poster;

            await _context.SaveChangesAsync();

            return(movie.Id);
        }