Uses the following packages:
- go.mongodb.org/mongo-driver/mongo - MongoDB Driver API
 - github.com/graphql-go/graphql - GraphQL
 - github.com/dgrijalva/jwt-go - JSON Web Tokens (JWT)
 - golang.org/x/crypto/bcrypt - Package bcrypt
 
- Authorization Header
 - SignUp/SignIn users
 - Users Profiles
 - List recipes
 - Recipe pages
 - Add/Edit/Delete recipes
 - Like/Unlike recipes
 
var config = configModel{	mongoUri: "mongodb://admin:admin@localhost:37812/react-recipes", // Mongo Uri	mongoDb: "react-recipes", // DB name	tokenSecret: "secret", // Secret to use in Tokens	tokenExp: "1h", // Expiration of Token	serveUri: ":4444", // Serve } | key | type | 
|---|---|
| _id | ID | 
| name | string | 
| imageUrl | string | 
| category | string | 
| description | string | 
| instructions | string | 
| createdDate | unixtime | 
| likes | int | 
| username | string | 
| key | type | 
|---|---|
| _id | ID | 
| username | string | 
| password | string | 
| string | |
| joinDate | unixtime | 
| favorites | array[Recipe] | 
{ getAllRecipes { ...MinimalRecipe } } fragment MinimalRecipe on Recipe { _id name imageUrl category } query ($searchTerm: String) { searchRecipes(searchTerm: $searchTerm) { _id name likes } } query ($_id: ID!) { getRecipe(_id: $_id) { ...CompleteRecipe } } fragment CompleteRecipe on Recipe { _id name imageUrl category description instructions createdDate likes username } mutation ($username: String!, $email: String!, $password: String!) { signupUser(username: $username, email: $email, password: $password) { token } } mutation ($username: String!, $password: String!) { signinUser(username: $username, password: $password) { token } } { getCurrentUser { username joinDate email favorites { _id name } } } username not used, obtained by Token Authorization.
mutation ($name: String!, $imageUrl: String!, $category: String!, $description: String!, $instructions: String!, $username: String) { addRecipe(name: $name, imageUrl: $imageUrl, category: $category, description: $description, instructions: $instructions, username: $username) { ...MinimalRecipe } } fragment MinimalRecipe on Recipe { _id name imageUrl category } mutation ($_id: ID!, $name: String!, $imageUrl: String!, $category: String!, $description: String!, $instructions: String!) { updateUserRecipe(_id: $_id, name: $name, imageUrl: $imageUrl, category: $category, description: $description, instructions: $instructions) { ...CompleteRecipe } } fragment CompleteRecipe on Recipe { _id name imageUrl category description instructions createdDate likes username } query ($username: String!) { getUserRecipes(username: $username) { ...CompleteRecipe } } fragment CompleteRecipe on Recipe { _id name imageUrl category description instructions createdDate likes username } username not used, obtained by Token Authorization.
mutation ($_id: ID!, $username: String!) { likeRecipe(_id: $_id, username: $username) { ...LikeRecipe } } fragment LikeRecipe on Recipe { _id likes } username not used, obtained by Token Authorization.
mutation ($_id: ID!, $username: String!) { unlikeRecipe(_id: $_id, username: $username) { ...LikeRecipe } } fragment LikeRecipe on Recipe { _id likes } mutation ($_id: ID!) { deleteUserRecipe(_id: $_id) { _id } } MIT