public ActionResult CreateMovie(MovieRequestViewModel movieRequest) { if (ModelState.IsValid) { var movie = movieRequest.Movie; Translation translation; Request req = null; // Check if the movie the user is trying to create a request for already exists. var movieToCheckFor = _unitOfWork.MovieRepository.Get() .Where(m => m.Title == movie.Title) .Where(m => m.ReleaseYear == movie.ReleaseYear) .SingleOrDefault(); // If the movie doesn't exists, insert the movie and request to the database. if (movieToCheckFor == null) { _unitOfWork.MovieRepository.Insert(movieRequest.Movie); _unitOfWork.RequestRepository.Insert(movieRequest.Request); _unitOfWork.Save(); TempData["UserMessage"] = "Beiðnin var stofnuð"; return(RedirectToAction("Index", "Request")); } // If the movie exists we need to check if it already has the translation or the request else if ((translation = _unitOfWork.TranslationRepository.Get() .Where(t => t.MediaID == movieToCheckFor.ID) .Where(t => t.LanguageID == movieRequest.Request.LanguageID) .SingleOrDefault()) == null && (req = _unitOfWork.RequestRepository.Get() .Where(r => r.MediaID == movieToCheckFor.ID) .Where(r => r.LanguageID == movieRequest.Request.LanguageID) .SingleOrDefault()) == null) { // If not we insert the request. movieRequest.Request.MediaID = movieToCheckFor.ID; _unitOfWork.RequestRepository.Insert(movieRequest.Request); _unitOfWork.Save(); TempData["UserMessage"] = "Beiðnin var stofnuð"; return(RedirectToAction("Index", "Request")); } movieRequest.Movie = movieToCheckFor; if (req != null) { ViewBag.Errormsg = "Þessi beiðni er nú þegar til."; ViewBag.ReqExist = true; } else { ViewBag.Errormsg = "Þessi þýðing er nú þegar til."; ViewBag.ReqExist = false; ViewBag.TranslationID = translation.ID; } } ViewBag.SubCategories = new SelectList(_unitOfWork.CategoryRepository.Get(), "ID", "Name", movieRequest.Movie.CategoryID); ViewBag.Languages = new SelectList(_unitOfWork.LanguageRepository.Get(), "ID", "Name"); return(View("RequestMovie")); }
public async Task <RequestEngineResult> RequestMovie([FromBody] MovieRequestViewModel movie) { var result = await MovieRequestEngine.RequestMovie(movie); if (result.Result) { var voteResult = await VoteEngine.UpVote(result.RequestId, RequestType.Movie); if (voteResult.IsError) { Log.LogError("Couldn't automatically add the vote for the movie {0} because {1}", movie.TheMovieDbId, voteResult.ErrorMessage); } } return(result); }
/// <summary> /// Requests the movie. /// </summary> /// <param name="model">The model.</param> /// <returns></returns> public async Task <RequestEngineResult> RequestMovie(MovieRequestViewModel model) { var movieInfo = await MovieApi.GetMovieInformationWithExtraInfo(model.TheMovieDbId, model.LanguageCode); if (movieInfo == null || movieInfo.Id == 0) { return(new RequestEngineResult { Result = false, Message = "There was an issue adding this movie!", ErrorMessage = $"Please try again later" }); } var fullMovieName = $"{movieInfo.Title}{(!string.IsNullOrEmpty(movieInfo.ReleaseDate) ? $" ({DateTime.Parse(movieInfo.ReleaseDate).Year})" : string.Empty)}"; var userDetails = await GetUser(); var canRequestOnBehalf = model.RequestOnBehalf.HasValue(); var isAdmin = await UserManager.IsInRoleAsync(userDetails, OmbiRoles.PowerUser) || await UserManager.IsInRoleAsync(userDetails, OmbiRoles.Admin); if (canRequestOnBehalf && !isAdmin) { return(new RequestEngineResult { Result = false, Message = "You do not have the correct permissions to request on behalf of users!", ErrorMessage = $"You do not have the correct permissions to request on behalf of users!" }); } if ((model.RootFolderOverride.HasValue || model.QualityPathOverride.HasValue) && !isAdmin) { return(new RequestEngineResult { Result = false, Message = "You do not have the correct permissions!", ErrorMessage = $"You do not have the correct permissions!" }); } var requestModel = new MovieRequests { TheMovieDbId = movieInfo.Id, RequestType = RequestType.Movie, Overview = movieInfo.Overview, ImdbId = movieInfo.ImdbId, PosterPath = PosterPathHelper.FixPosterPath(movieInfo.PosterPath), Title = movieInfo.Title, ReleaseDate = !string.IsNullOrEmpty(movieInfo.ReleaseDate) ? DateTime.Parse(movieInfo.ReleaseDate) : DateTime.MinValue, Status = movieInfo.Status, RequestedDate = DateTime.UtcNow, Approved = false, RequestedUserId = canRequestOnBehalf ? model.RequestOnBehalf : userDetails.Id, Background = movieInfo.BackdropPath, LangCode = model.LanguageCode, RequestedByAlias = model.RequestedByAlias, RootPathOverride = model.RootFolderOverride.GetValueOrDefault(), QualityOverride = model.QualityPathOverride.GetValueOrDefault() }; var usDates = movieInfo.ReleaseDates?.Results?.FirstOrDefault(x => x.IsoCode == "US"); requestModel.DigitalReleaseDate = usDates?.ReleaseDate ?.FirstOrDefault(x => x.Type == ReleaseDateType.Digital)?.ReleaseDate; var ruleResults = (await RunRequestRules(requestModel)).ToList(); var ruleResultInError = ruleResults.Find(x => !x.Success); if (ruleResultInError != null) { return(new RequestEngineResult { ErrorMessage = ruleResultInError.Message, ErrorCode = ruleResultInError.ErrorCode }); } if (requestModel.Approved) // The rules have auto approved this { var requestEngineResult = await AddMovieRequest(requestModel, fullMovieName, model.RequestOnBehalf); if (requestEngineResult.Result) { var result = await ApproveMovie(requestModel); if (result.IsError) { Logger.LogWarning("Tried auto sending movie but failed. Message: {0}", result.Message); return(new RequestEngineResult { Message = result.Message, ErrorMessage = result.Message, Result = false }); } return(requestEngineResult); } // If there are no providers then it's successful but movie has not been sent } return(await AddMovieRequest(requestModel, fullMovieName, model.RequestOnBehalf)); }
public async Task <RequestEngineResult> RequestMovie([FromBody] MovieRequestViewModel movie) { return(await MovieRequestEngine.RequestMovie(movie)); }
/// <summary> /// Requests the movie. /// </summary> /// <param name="model">The model.</param> /// <returns></returns> public async Task <RequestEngineResult> RequestMovie(MovieRequestViewModel model) { var movieInfo = await MovieApi.GetMovieInformationWithExtraInfo(model.TheMovieDbId); if (movieInfo == null || movieInfo.Id == 0) { return(new RequestEngineResult { Result = false, Message = "There was an issue adding this movie!", ErrorMessage = $"Please try again later" }); } var fullMovieName = $"{movieInfo.Title}{(!string.IsNullOrEmpty(movieInfo.ReleaseDate) ? $" ({DateTime.Parse(movieInfo.ReleaseDate).Year})" : string.Empty)}"; var userDetails = await GetUser(); var requestModel = new MovieRequests { TheMovieDbId = movieInfo.Id, RequestType = RequestType.Movie, Overview = movieInfo.Overview, ImdbId = movieInfo.ImdbId, PosterPath = PosterPathHelper.FixPosterPath(movieInfo.PosterPath), Title = movieInfo.Title, ReleaseDate = !string.IsNullOrEmpty(movieInfo.ReleaseDate) ? DateTime.Parse(movieInfo.ReleaseDate) : DateTime.MinValue, Status = movieInfo.Status, RequestedDate = DateTime.UtcNow, Approved = false, RequestedUserId = userDetails.Id, Background = movieInfo.BackdropPath }; var usDates = movieInfo.ReleaseDates?.Results?.FirstOrDefault(x => x.IsoCode == "US"); requestModel.DigitalReleaseDate = usDates?.ReleaseDate ?.FirstOrDefault(x => x.Type == ReleaseDateType.Digital)?.ReleaseDate; var ruleResults = (await RunRequestRules(requestModel)).ToList(); if (ruleResults.Any(x => !x.Success)) { return(new RequestEngineResult { ErrorMessage = ruleResults.FirstOrDefault(x => x.Message.HasValue()).Message }); } if (requestModel.Approved) // The rules have auto approved this { var requestEngineResult = await AddMovieRequest(requestModel, fullMovieName); if (requestEngineResult.Result) { var result = await ApproveMovie(requestModel); if (result.IsError) { Logger.LogWarning("Tried auto sending movie but failed. Message: {0}", result.Message); return(new RequestEngineResult { Message = result.Message, ErrorMessage = result.Message, Result = false }); } return(requestEngineResult); } // If there are no providers then it's successful but movie has not been sent } return(await AddMovieRequest(requestModel, fullMovieName)); }