Skip to main content
  1. All Posts/

Mock-GraphQL-API-Docker

eCommerce JavaScript

GraphQuill’s Mock GraphQL API

This GraphQL API was created and used for testing during the development of GraphQuill. GraphQuill is a real-time GraphQL API exploration extension for VSCode.
In an effort to allow other engineers to test out GraphQuill on a mock GraphQL API, we’ve open-sourced this repo. This project uses a docker instance of PostgreSQL.
There is also a locally hosted version that uses PostgreSQL and MongoDB here.

Using this GraphQL API

Clone this repo:

git clone https://github.com/GraphQuill/Mock-GraphQL-API.git

Within the cloned folder, run the docker-setup script:

npm run docker-setup

After setting up the docker images, run the docker-compose script to spin up the docker images:

npm run docker-compose

To stop the docker containers, either press Ctrl + C in the terminal or run this script in a separate terminal:

npm run docker-stop

Your GraphQL API has been setup now and seeded with data from faker. Now you can use the GraphQuill extension to view the API’s schema, send queries or mutations and receive responses, all within VS Code 😀

The Schema of this API

This API was built as the backend of an eCommerce store. Below is the GraphQL schema that describes GraphQL types, available queries and mutations.

AVAILABLE QUERIES:
address (id: Int!): Address!
addresses: [Address]!
customer (id: Int!): Customer!
customers: [Customer]!
cart (customerId: Int!): Cart!
order (orderId: Int!): Order!
customerOrders (customerId: Int!): [Order]!
product (productId: Int!): Product!
products: [Product]!
warehouse (warehouseId: Int!): Warehouse!
warehouses: [Warehouse]!

AVAILABLE MUTATIONS:
createOrUpdateAddress (
  customerId: Int!, 
  address: String!, 
  address2: String, 
  city: String!, 
  state: String!, 
  zipCode: String!
  ): Int!
addCustomer (
  firstName: String!, 
  lastName: String!, 
  email: String!, 
  phoneNumber: String!
  ): Customer!
updateCustomer (
  id: Int!, 
  firstName: String, 
  lastName: String, 
  email: String, 
  phoneNumber: String
  ): Customer!
deleteCustomer (id: Int!): Int!
createOrUpdateCart (
  customerId: Int!, 
  newItem: String!
  ): Cart!
removeItemsFromCart (
  customerId: Int!, 
  itemsToRemove: String!
  ): Cart!
deleteCart (customerId: Int!): Cart!
addOrder (
  customerId: Int!, 
  products: OrderProduct!
  ): Int!
addProduct (
  name: String!, 
  description: String!, 
  price: Float!, 
  weight: Float!
  ): Product!
updateProduct (
  productId: Int!, 
  name: String, 
  description: String, 
  price: Float, 
  weight: Float
  ): Product!
deleteProduct (productId: Int!): Product!
addWarehouse (
  name: String!, 
  addressId: Int!
  ): Warehouse!
updateWarehouse (
  warehouseId: Int!, 
  name: String, 
  id: Int
  ): Warehouse!
deleteWarehouse (warehouseId: Int!): Warehouse!


TYPES: 
Address
  id: Int!,
  address: String!,
  address2: String,
  city: String!,
  state: String!,
  zipCode: String!
  
Customer
  id: Int!,
  firstName: String!,
  lastName: String!,
  email: String!,
  phoneNumber: String!,
  address: Address,
  cart: Cart
  
Cart
  customerId: Int!,
  products: [String!],
  wishlist: [String!]
  
Order
  orderId: Int!,
  customer: Customer,
  products: [Product!]
  
Product
  productId: Int!,
  name: String!,
  description: String!,
  price: Float!,
  weight: Float!,
  productQty: Int
  
Warehouse
  warehouseId: Int!,
  name: String!,
  address: Address