Exemple #1
0
 public Task <List <Movie> > SearchMovies(MovieSearchFilters filter)
 {
     try
     {
         var movies = (from M in _movieDBContext.Movies
                       join MG in _movieDBContext.MovieGenres on M.Id equals MG.MovieId
                       join G in _movieDBContext.Genres on MG.GenreId equals G.Id
                       where (filter.yearOfRelease <= 0 || M.ReleaseYear == filter.yearOfRelease) &&
                       (string.IsNullOrEmpty(filter.title) || M.Title.Contains(filter.title)) &&
                       (filter == null ||
                        filter.generes == null ||
                        filter.generes.Count <= 0 ||
                        filter.generes.Any(x => x.ToLower().Trim() == G.Name.ToLower().Trim()))
                       select new Movie
         {
             Id = M.Id,
             Title = M.Title,
             ReleaseYear = M.ReleaseYear,
             Runningtime = M.Runningtime,
             AverageRating = M.AverageRating
         })?.ToList();
         var distinctMovies = movies
                              .GroupBy(x => x.Id)
                              .Select(x => x.First())?.ToList();
         return(Task.FromResult(distinctMovies));
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
        public async Task <IActionResult> SearchMovies([FromBody] MovieSearchFilters filter)
        {
            try
            {
                _logger.LogInformation("Information is logged, In SearchMovies() API call with filter=" + JsonConvert.SerializeObject(filter));
                if (filter == null ||
                    ((filter.generes == null || filter.generes.Count <= 0) &&
                     string.IsNullOrEmpty(filter.title) && filter.yearOfRelease <= 0))
                {
                    return(BadRequest("No search criteria given")); // Returns HttpStatusCode = 400
                }
                var movies = await _movieApiRepository.SearchMovies(filter);

                var movieDtos = _mapper.Map <List <MoviesDto> >(movies);
                foreach (MoviesDto moviesDto in movieDtos)
                {
                    moviesDto.Generes = string.Join(", ", _genreDataRepository.GetGenres(moviesDto.Id)?.Select(x => x.Name));
                }
                if (movieDtos != null && movieDtos.Any())
                {
                    return(Ok(movieDtos)); // Returns HttpStatusCode = 200
                }
                else
                {
                    return(NotFound("No movie found based on the criteria"));  // Returns HttpStatusCode = 404
                }
            }
            catch (Exception ex)
            {
                _logger.LogError("Error occured in SearchMovies() API call." + "\n" + ex.Message + "\n" + ex.StackTrace + "\n" + ex.InnerException);
                throw ex;
            }
        }