- Notifications
You must be signed in to change notification settings - Fork1
Tautorn/typescript-graphql-postgres-boilerplate
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
- Make sure you haveDocker installed on your machine.
- Make sure you haveNodeJS installed on your machine.
Then run
npm
npm i
yarn
yarn install
.env file
- Create the
.envfile - Copy and parse the database connection information below:
POSTGRES_USER=dockerPOSTGRES_PASSWORD=dockerPOSTGRES_HOST=localhostPOSTGRES_DB=todoPOSTGRES_PORT=54320
To create database, run:
docker-compose up -d
dump data
To initialize the dump data for a database, run:
npm run seed
To run on development environment
npm run dev
To run on production environment
npm start
For more information:https://graphql.org/learn/schema/
graphql/types/todo-list.graphql
type ResponseTodoList { status: String! message: String! data: [TodoListItem]}type TodoListItem { id: ID! content: String!}input InputTodoListItem { content: String!}type Query { todoListItems(keyword: String): ResponseTodoList!}type Mutation { createTodoItem(item: InputTodoListItem): ResponseTodoList!}
graphql/types/schema.graphql
# import Query.*, Mutation.* from "todo-list.graphql"The model actually the type of data mapped to fields of table in database.
models/todo-list.ts
exportinterfaceTodoListItem{id:number;content:string;created_at:Date;updated_at:Date;}exportinterfaceInputTodoListItem{content:string;}
graphql/resolvers/queries/todoListItems.ts
import{DB}from'../../../types';exportasyncfunctiontodoListItems(db:DB,args:any){constres=awaitdb.query('SELECT * FROM todo_list'); ...}
graphql/resolvers/mutations/createTodoItem.ts
import{DB}from'../../../types';exportasyncfunctioncreateTodoItem(db:DB,args:any){constquery='INSERT INTO todo_list(content) VALUES($1) RETURNING *';constvalues=['Call Your Dad'];constres=awaitdb.query(query,values); ...}
This sandbox can only run in development mode by commandyarn dev ornpm run dev. After starting the development environment, open:
query - without param
query{ todoListItems{ status data{ content } }}query - with param
query{ todoListItems(keyword:"Call your Mom"){ status data{ content } }}mutation - createTodoItem
mutation{ createTodoItem(item:{ content:"Just relax, dude!" }){ status data{ content } }}Withexpress-graphql, you can just send an HTTPPOST request to the endpoint you mounted your GraphQL server on, passing the GraphQL query as the query field in a JSON payload.
POST cURL
curl -X POST \ http://localhost:4000/graphql \ -H'Content-Type: application/json' \ -H'Postman-Token: c011dc94-6f67-483a-84cb-2bd4ed442a95' \ -H'cache-control: no-cache' \ -d'{"query": "{ todoListItems{ data { content } } }"}'
GET cURL
curl -X GET \'http://localhost:4000/graphql?query=query+todoListItems%28$keyword:String%29{todoListItems%28keyword:$keyword%29{status}}&variables={%22keyword%22:%22Call%20your%20Mom%22}' \ -H'Postman-Token: f92396a4-4f51-47f0-ac20-3c900289358f' \ -H'cache-control: no-cache'
POST fetch
constkeyword='Call your Mom';constquery=`{ todoListItems(keyword: "${keyword}"){ data { content } } }`;fetch('/graphql',{method:'POST',headers:{'Content-Type':'application/json',Accept:'application/json',},body:JSON.stringify({ query}),}).then(res=>res.json()).then(data=>console.log('data returned:',data));
GET fetch
constquery=` todoListItems($keyword:String){ todoListItems(keyword:$keyword){ status data{ content } } }`;constvariables=`{"keyword":"Call your Mom"}`;fetch(`/graphql?query=query+${query}&variables=${variables}`).then(res=>res.json()).then(data=>console.log('data returned:',data));
For more information check:
About
Simple boilerplate integrated typescript, graphql, postgres and apollo server
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Languages
- TypeScript95.3%
- Dockerfile2.6%
- Shell2.1%