Optional Lesson
This lesson is optional and will not count towards your achievement.
To view the completed code, check out the 13-listing-ratings branch.
The last remaining element on the Movie page is the list of ratings on the right-hand side of the page. Although the count in the header is now accurate, the ratings list being returned by the API is still hardcoded.
The list of ratings is populated by the forMovie() method in the RatingService, which currently returns a hardcoded list of ratings.
async forMovie(id, sort = 'timestamp', order = 'ASC', limit = 6, skip = 0) {
  // TODO: Get ratings for a Movie
  return ratings
}In this challenge, you will run the following Cypher statement in a read transaction:
MATCH (u:User)-[r:RATED]->(m:Movie {tmdbId: $id})
RETURN r {
    .rating,
    .timestamp,
    user: u {
        .userId, .name
    }
} AS review
ORDER BY r.timestamp DESC
SKIP $skip
LIMIT $limitYour Task
- 
Modify the forMovie()method to retrieve the ratings from Neo4j.
- 
Remember to close the session and use the toNativeTypes()function to convert the object into native JavaScript types.
Open src/services/movie.service.js
Click to reveal the completed forMovie() method
async forMovie(id, sort = 'timestamp', order = 'ASC', limit = 6, skip = 0) {
  // Open a new database session
  const session = this.driver.session()
  // Get ratings for a Movie
  const res = await session.executeRead(
    tx => tx.run(`
      MATCH (u:User)-[r:RATED]->(m:Movie {tmdbId: $id})
      RETURN r {
        .rating,
        .timestamp,
        user: u {
          .id, .name
        }
      } AS review
      ORDER BY r.\`${sort}\` ${order}
      SKIP $skip
      LIMIT $limit
    `, { id, limit: int(limit), skip: int(skip) })
  )
  // Close the session
  await session.close()
  return res.records.map(row => toNativeTypes(row.get('review')))
}Testing
To test that this functionality has been correctly implemented, run the following code in a new terminal session:
npm run test 13The test file is located at test/challenges/13-listing-ratings.spec.js.
Are you stuck? Click here for help
If you get stuck, you can see a working solution by checking out the 13-listing-ratings branch by running:
git checkout 13-listing-ratingsYou may have to commit or stash your changes before checking out this branch. You can also click here to expand the Support pane.
Verifying the Test
Who was the first user to rate Pulp Fiction?
As part of the test suite, the final test will log the name of the first user to rate the movie Pulp Fiction.
Paste the name of the user the box below without quotes or whitespace and click Check Answer.
- 
✓ Keith Howell 
Hint
You can also find the answer by running the following Cypher statement:
MATCH (u:User)-[r:RATED]->(m:Movie {title: "Pulp Fiction"})
RETURN u.name
ORDER BY r.timestamp ASC
LIMIT 1Copy the answer without any quotes or whitespace.
Lesson Summary
In this Challenge, you modified the forMovie() method on the RatingService to return a paginated list of reviews for a movie from the Neo4j database.
In the next Challenge, you will update the PeopleService to return list of actors and directors from Neo4j.