GraphQL API of a Medium clone. Ready to use in your front end application :star:
A project to learn a lot of tecnologies and build something awesome and great inspired on Medium the blog website.
You can use this API to create your own front end to study new frameworks of stacks.
You can inspect the API in Graphiql in the url: http://localhost:3000/graphiql
The easy way to start is to clone this repo, read the prerequisites and then get a Ruby package manager to install everything. We recommend rbenv or RVM to handler this task.
Get only one package manager and install Ruby depending of your choice
$ rbenv install 2.4.2
$ rvm install 2.4.2
$ gem install bundler
$ bundle install
$ rails db:schema:load && rails db:seed
$ docker-compose up -d
$ docker-compose exec app bundle exec rake db:setup db:migrate db:seed
$ docker run --name database_for_ruby -e POSTGRES_DB=medium_graphql -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres:9.4
$ docker build . -t ruby && docker run --env-file ./.env -p 3000:3000 --link database_for_ruby ruby -t ruby_graphql_backend
Check http://localhost:3000/graphiql
GraphQL Mutation | Description |
---|---|
addOrRemovePostsToCollection | Add or remove posts from a collection based on the provided post IDs. |
addOrRemoveTagsToPost | Add or remove tags from a post based on the provided tag IDs. |
createBookmark | Create a bookmark to save a post for later reading. |
createClap | Add claps to a post with the specified number of claps. |
createCollection | Create a collection and add posts to it. |
createComment | Create a comment on a post. |
createPost | Create a new post with the specified title, body, picture, topic, and tags. |
createUser | Create a new user with the provided username, first name, last name, bio, picture, and credentials. |
deleteBookmark | Permanently delete a bookmark with the provided ID. |
deleteCollection | Permanently delete a collection with the provided ID. |
deleteComment | Permanently delete a comment with the provided ID. |
deletePost | Permanently delete a post with the provided ID. |
editCollection | Edit the title, description, and/or picture of a collection. |
editComment | Edit the body of a comment. |
editPost | Edit the title, body, picture, and/or topic of a post. |
refreshPassword | Update the password using an email, password, and token for password recovery. |
signInUser | Authenticate a user using email and password and retrieve a token. |
updateToken | Update the token for password recovery using the email. |
GraphQL Query | Description |
---|---|
allCollections | Get all collections based on the provided filter. |
allPosts | Get all posts based on the provided filter. |
allTags | Get all tags based on the provided filter. |
allTopics | Get all topics. |
allUsers | Get all users based on the provided filter. |
searchBookmark | Search for a bookmark with the provided ID. |
searchCollection | Search for a collection with the provided ID. |
searchComment | Search for a comment with the provided ID. |
searchPost | Search for a post with the provided ID. |
searchTopic | Search for a topic with the provided ID. |
searchUser | Search for a user with the provided ID or username. |
Backend ready to use, tested. But you can improve this, some ideas: