예제 #1
0
        /// <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));
        }
예제 #2
0
 public Task AddRangeAsync <T>(IEnumerable <T> entities)
     where T : class
 {
     return(_movieContext.AddRangeAsync(entities));
 }