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()); }
/// <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); }