/// <summary> /// Film tavsiyesi için kullanılır. /// </summary> /// <param name="movieId"></param> /// <param name="userEmail"></param> /// <returns></returns> public async Task <TaskResult <IEnumerable <Movie> > > RecommendMovieAsync(int movieId, string userEmail) { var movie_db_api_key = _configuration["TMDB:ApiKey"]; var movieList = new List <Movie>(); using (var httpClient = new HttpClient()) { var url = $"https://api.themoviedb.org/3/movie/{movieId}/recommendations?api_key={movie_db_api_key}&page=1"; //Mail atılacak body için html başlangıcı. var html = new StringBuilder("<html><table><thead><tr><th>Id</th><th>Title</th><th>Description</th><th>ReleaseDate</th></tr></thead><tbody>"); //The movie Db Api call atılır. using (var response = await httpClient.GetAsync(url)) { var apiResponse = await response.Content.ReadAsStringAsync(); //Response MovieSearchResultModel olarak deserialize edilir. var data = JsonConvert.DeserializeObject <MovieSearchResultModel>(apiResponse); foreach (var result in data.results) { var release_date = result.release_date; var date = DateTime.ParseExact(release_date, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture).Date; //Mail içeriğine tavsiye edilen kayıt atılır. html.Append($"<tr><td>{result.id}</td><td>{result.original_title}</td><td>{result.overview}</td><td>{date}</td></tr>"); //Eğer tavsiye edilen film db'de kayıtlı değil ise yeni kayıt oluşturulur. if (!(await _movieContext.Movies.AnyAsync(q => q.Id == result.id))) { var movie = new Movie { ReleaseDate = date, Title = result.title, Id = result.id, Description = result.overview, AverageVote = result.vote_average, VoteCount = Int32.Parse(result.vote_count) }; movieList.Add(movie); } } //Mail içeriği için table ,html tagleri kapatılır. html.Append("</tbody></table></html>"); } await _movieContext.AddRangeAsync(movieList); await _movieContext.SaveChangesAsync(); //Mail içeriği hazırlanır. var adress = _configuration["MailClient:MailAdress"]; var displayName = _configuration["MailClient:DisplayName"]; var from = new MailAddress(adress, displayName); var mailMessage = new MailMessage() { From = from, To = { userEmail }, Subject = "Movie Recommendation", Body = html.ToString(), IsBodyHtml = true }; try { //Mail atılır. await SendMailAsync(mailMessage); } catch { //Herhangi bir problemle karşılaşıldığında ilgili hata mesajı ile dönülür. return(new TaskResult <IEnumerable <Movie> >(false, null, "Mail atılırken bir sorun oluştu.")); } finally { mailMessage.Dispose(); } } return(new TaskResult <IEnumerable <Movie> >(true, movieList)); }
public Task AddRangeAsync <T>(IEnumerable <T> entities) where T : class { return(_movieContext.AddRangeAsync(entities)); }