This task is for demonstrating your understanding of HTTP, GraphQL, Node.js and general API practices.
Instructions:
- Implement a Node.js-based server with raw
http
, Koa or Express. Go here -> https://scout-base.herokuapp.com/graphql - Add a
/graphql
endpoint serving the apollo-server or any other GraphQL implementation. - Schema must be able to return proper response for the following public query:
NOTE: You may notice I moved "directors" outside of "actors", this was intentional as I believe they belong to Movies and not to Actors
{
movies {
title
year
rating
actors {
name
birthday
country
}
directors {
name
birthday
country
}
}
}
- Add support for the following mutation:
mutation {
createUser(userInput: {username: "Username", password: "password"}) {
_id
username
password
token
createdAt
updatedAt
}
}
- To expand on the number four, add a mutation-based authentication that accepts:
mutation {
login(userInput: {username: "Username", password: "password"}) {
_id
username
password
token
createdAt
updatedAt
}
}
- Authenticated users may request additional fields for the query used earlier. New
scoutbase_rating
field must return the a random string between 5.0-9.0:
NOTE: "scoutbase_rating" is always available but will only return the rating if a user (any) has logged-in in the last 3 minutes, else it returns null
{
movies {
movies {
_id
scoutbase_rating
title
year
rating
actors{ _id name birthday country createdAt updatedAt}
directors{ _id name birthday country createdAt updatedAt}
createdAt
updatedAt
}
}
}
-
/graphql
must be accessible for external clients. -
End.