示例#1
0
        /// <summary>
        /// Get list of Movies based on query parameters
        /// </summary>
        /// <param name="movieQueryParameters">query params</param>
        /// <returns>List of Movie</returns>
        public Task <IEnumerable <Movie> > GetMoviesAsync(MovieQueryParameters movieQueryParameters)
        {
            // call the worker with the params
            if (movieQueryParameters == null)
            {
                return(GetMoviesAsync(string.Empty, string.Empty, offset: 0, limit: 100));
            }

            return(GetMoviesAsync(movieQueryParameters.Q, movieQueryParameters.Genre, movieQueryParameters.Year, movieQueryParameters.Rating, movieQueryParameters.ActorId, movieQueryParameters.GetOffset(), movieQueryParameters.PageSize));
        }
示例#2
0
        /// <summary>
        /// Get a list of Movies by search and/or filter terms
        /// </summary>
        /// <param name="movieQueryParameters">movie search parameters</param>
        /// <returns>List of Movies or an empty list</returns>
        public async Task<IEnumerable<Movie>> GetMoviesAsync(MovieQueryParameters movieQueryParameters)
        {
            if (movieQueryParameters == null)
            {
                throw new ArgumentNullException(nameof(movieQueryParameters));
            }

            string sql = MovieSelect;

            int offset = movieQueryParameters.GetOffset();
            int limit = movieQueryParameters.PageSize;

            string offsetLimit = string.Format(CultureInfo.InvariantCulture, MovieOffset, offset, limit);

            if (!string.IsNullOrWhiteSpace(movieQueryParameters.Q))
            {
                movieQueryParameters.Q = movieQueryParameters.Q.Trim();
                sql += " and contains(m.title, @q, true) ";
            }

            if (movieQueryParameters.Year > 0)
            {
                sql += " and m.year = @year ";
            }

            if (movieQueryParameters.Rating > 0)
            {
                sql += " and m.rating >= @rating ";
            }

            if (!string.IsNullOrWhiteSpace(movieQueryParameters.ActorId))
            {
                // convert to lower
                movieQueryParameters.ActorId = movieQueryParameters.ActorId.Trim().ToLowerInvariant();
                sql += " and array_contains(m.roles, { actorId: @actorId }, true) ";
            }

            if (!string.IsNullOrWhiteSpace(movieQueryParameters.Genre))
            {
                movieQueryParameters.Genre = movieQueryParameters.Genre.Trim();
                sql += " and contains(m.genreSearch, @genre, true) ";
            }

            sql += MovieOrderBy + offsetLimit;

            // Parameterize fields
            QueryDefinition queryDefinition = new QueryDefinition(sql);

            if (!string.IsNullOrWhiteSpace(movieQueryParameters.Q))
            {
                queryDefinition.WithParameter("@q", movieQueryParameters.Q);
            }

            if (!string.IsNullOrWhiteSpace(movieQueryParameters.ActorId))
            {
                queryDefinition.WithParameter("@actorId", movieQueryParameters.ActorId);
            }

            if (!string.IsNullOrWhiteSpace(movieQueryParameters.Genre))
            {
                // genreSearch is stored delimited with :
                queryDefinition.WithParameter("@genre", "|" + movieQueryParameters.Genre + "|");
            }

            if (movieQueryParameters.Year > 0)
            {
                queryDefinition.WithParameter("@year", movieQueryParameters.Year);
            }

            if (movieQueryParameters.Rating > 0)
            {
                queryDefinition.WithParameter("@rating", movieQueryParameters.Rating);
            }

            return await InternalCosmosDBSqlQuery<Movie>(queryDefinition).ConfigureAwait(false);
        }
示例#3
0
        /// <summary>
        /// Get Cosmos query string based on query parameters
        /// </summary>
        /// <param name="movieQueryParameters">query params</param>
        /// <returns>Cosmos query string</returns>
        public string GetMovieIds(MovieQueryParameters movieQueryParameters)
        {
            List <Movie> cache;
            string       ids = string.Empty;

            if (movieQueryParameters == null)
            {
                cache = GetMovies(string.Empty, string.Empty, offset: 0, limit: 100);
            }
            else
            {
                cache = GetMovies(movieQueryParameters.Q, movieQueryParameters.Genre, movieQueryParameters.Year, movieQueryParameters.Rating, movieQueryParameters.ActorId, movieQueryParameters.GetOffset(), movieQueryParameters.PageSize);
            }

            foreach (Movie m in cache)
            {
                ids += $"'{m.Id}',";
            }

            // nothing found
            if (string.IsNullOrEmpty(ids))
            {
                return(string.Empty);
            }

            string sql = "select m.id, m.partitionKey, m.movieId, m.type, m.textSearch, m.title, m.year, m.runtime, m.rating, m.votes, m.totalScore, m.genres, m.roles from m where m.id in ({0}) order by m.textSearch ASC, m.movieId ASC";

            return(sql.Replace("{0}", ids[0..^ 1], StringComparison.Ordinal));