Skip to content
🌈 Simple Fullstack GraphQL Application. API built with Express + GraphQL + Sequelize (supports MySQL, Postgres, Sqlite and MSSQL). WebApp built with React + Redux to access the API. Written in ES6 using Babel + Webpack.
Branch: master
Clone or download
Latest commit bc703c2 Jul 9, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
api Updated dependencies Jul 9, 2019
web Updated dependencies Jul 9, 2019
.gitignore Init Oct 19, 2017
LICENSE Create LICENSE Oct 1, 2018
README.md Update README.md May 21, 2019

README.md

fullstack-graphql

Fullstack GraphQL

Simple Demo Application

API built with Node + Express + GraphQL + Sequelize (supports MySQL, Postgres, Sqlite and MSSQL).

WebApp built with React + Redux.

Written in ES6 using Babel + Webpack.

οΏ½? Features

  • List thoughts
  • Add thought
  • Delete thought
  • View single thought

β–ΆοΏ½? Running

  • Clone repo git clone git@github.com:atulmy/fullstack-graphql.git fullstack-graphql
  • Install NPM modules API cd api and npm install
  • Install NPM modules Webapp cd web and npm install
  • Modify /api/src/config/database.json for database credentials
  • Modify /api/src/config/config.json for API port (optional)
  • Modify https://waybackassets.bk21.net/.env for web port (optional)
  • Run API cd api and npm start, browse GraphiQL at http://localhost:8000/
  • Run Webapp cd web and npm start, browse web at http://localhost:3000/

Sample API logs

[nodemon] starting `babel-node src/index.js --presets es2015,stage-2`
SETUP - Connecting database...
SETUP - Loading modules...
SETUP - GraphQL...
SETUP - Syncing database tables...
INFO - Database connected.
INFO - Database sync complete.
SETUP - Starting server...
INFO - Server started on port 3000.

πŸ“Έ Screenshots

screenshot

Video: MOV

οΏ½?οΏ½ Core Structure

fullstack-graphql
  β”œβ”€β”€ api (api.example.com)
  β”‚   β”œβ”€β”€ src
  β”‚   β”‚   β”œβ”€β”€ config
  β”‚   β”‚   β”œβ”€β”€ models
  β”‚   β”‚   β”œβ”€β”€ schema
  β”‚   β”‚   β”œβ”€β”€ setup
  β”‚   β”‚   └── index.js
  β”‚   β”‚
  β”‚   └── package.json
  β”‚
  β”œβ”€β”€ web (example.com)
  β”‚   β”œβ”€β”€ public
  β”‚   β”œβ”€β”€ src
  β”‚   β”‚   β”œβ”€β”€ components
  β”‚   β”‚   β”œβ”€β”€ setup
  β”‚   β”‚   └── index.js
  β”‚   β”‚
  β”‚   β”œβ”€β”€ .env
  β”‚   └── package.json
  β”‚
  β”œβ”€β”€ .gitignore
  └── README.md

πŸ“˜ Guides

API

  • Adding new Module (Eg: Users):
    • Copy /api/src/models/thought.js to /api/src/models/user.js and modify the file for table name and respective fields
    • Add an entry to the models object in /api/src/models/index.js
    • Copy /api/src/schema/thoughts to /api/src/schema/users and modify type.js, resolvers.js and fields/query.js and fields/mutations.js
    • Import /api/src/schema/users/fields/query.js in /api/src/schema/query.js
    • Import /api/src/schema/users/fields/mutations.js in /api/src/schema/mutations.js

Webapp

  • Adding new Module (Eg: Users):
    • Create folder users under https://waybackassets.bk21.net/src/components/
    • Create your Container and Resusable components under https://waybackassets.bk21.net/src/components/users
    • Create api folder under https://waybackassets.bk21.net/src/components/users
    • Add actions.js where all your Redux Action Types and Actions will reside (refer https://waybackassets.bk21.net/src/components/thoughts/api/actions.js)
    • Add state.js where all your respective Reducers will recide (refer https://waybackassets.bk21.net/src/components/thoughts/api/state.js)
    • Import the module state in https://waybackassets.bk21.net/src/setup/store.js to make it avaliable to the app
    • Encapsulate all your User related code in https://waybackassets.bk21.net/src/components/users
  • Adding new Route (Eg: /users):
    • Add a new entry to routes object in https://waybackassets.bk21.net/src/setup/routes.js (eg user: { list: '/list' })
    • Edit https://waybackassets.bk21.net/src/components/App.js and add the route entry

Sample GraphQL Queries

These queries are generated on client side using queryBuilder() helper defined in https://waybackassets.bk21.net/src/setup/helpers.js

Query - Get List

query {
  thoughts {
    id,
    name,
    thought
  }
}
                

Response

{
  "data": {
    "thoughts": [
      {
        "id": 1,
        "name": "Arya Stark",
        "thought": "A girl has no name"
      },
      {
        "id": 2,
        "name": "Jon Snow",
        "thought": "I know nothing"
      }
    ]
  }
}
                

Query - Get by Param

query {
  thought(id: 1) {
    id,
    name,
    thought
  }
}
                

Response

{
  "data": {
    "thought": {
      "id": 1,
      "name": "Arya",
      "thought": "A girl has no name"
    }
  }
}
                

Mutation - Create

mutation {
  thoughtCreate(
    name: "Tyrion Lannister", 
    thought:"I drink and I know things"
  ) {
    id
  }
}
                

Response

{
  "data": {
    "thoughtCreate": {
      "id": 3
    }
  }
}
                

Mutation - Remove

mutation {
  thoughtRemove(id: 3) {
    id
  }
}
                

Response

{
  "data": {
    "thoughtRemove": {
      "id": null
    }
  }
}
                

πŸ’¬ Community Reviews

Facebook Groups: NodeJS β€’ ReactJS β€’ GraphQL

Reddit: NodeJS β€’ ReactJS β€’ GraphQL

οΏ½? Showcase

Following projects have been built with or inspired from fullstack-graphql

  • Crate - Get monthly subscription of trendy clothes and accessories - GitHub
  • HIRESMART - Application to streamline hiring process - GitHub
  • Would really appreciate if you add your project to this list by sending a PR

Resources

🎩 Authors

οΏ½? Support

Become a Patreon

πŸ“œ License

Copyright (c) 2017-18 Atul Yadav http://github.com/atulmy

The MIT License (http://www.opensource.org/licenses/mit-license.php)

You can’t perform that action at this time.