discuss
discuss copied to clipboard
100% serverless forum software (Technologies used: Serverless, DynamoDB, ES2015, React, Redux, Node.js, GraphQL)
Discuss
Serverless forum software
Table of contents
- Video demo
- Setup
- backend
- client
- GraphQL queries
- users
- posts
- comments
Video demo
Setup
Backend
-
Clone
git clone [email protected]:JustServerless/discuss.gitto your local machine. -
Run
cd discussto change directory. -
Run
npm installto install all necessary NPM dependencies for the Serverless project. -
Run
serverless project initto initialize the Serverless project. -
Add the following environment variables to the JSON array of the corresponding file in
_meta/variables. (e.g. in_meta/variables/s-variables-common.json)
{
...
"authTokenSecret": "STRONGVALUE"
}
-
Run
cd backend/lib && npm install && cd ../../to install the NPM dependencies for the GraphQL backend. -
Run
serverless dash deployand select endpoint and function to deploy the CORS enabled endpoint and function.
Client
-
Run
cd client/src && npm installtin install the NPM dependencies for the client. -
Replace the
API_URLinclient/src/app/js/actions/index.jswith your deployed endpoint (the root of the endpoint) without thegraphqlstring at the end. -
Run
npm start(in the client/src folder) to run the client locally. The client is available in your browser athttp://localhost:8080/ -
Edit
s-project.jsonand changebucketName. Runnpm run buildto build the client -
Run
serverless client deployto host the frontend with the help of an S3 bucket
GraphQL queries
Connect to the graphql endpoint of the API (e.g. http://example.com/graphql) and a run the query as the query parameter against it.
Users
signUp
mutation signUp {
signUp (
email: "[email protected]"
username: "test"
password: "12345678"
)
{
id
email
username
createdAt
updatedAt
}
}
signIn
mutation signIn {
signIn (
email: "[email protected]"
password: "12345678"
)
{
id
email
username
createdAt
updatedAt
jwt
}
}
users
{
users {
id
email
username
createdAt
updatedAt
}
}
user
{
user(id: "id") {
id
email
username
createdAt
updatedAt
}
}
updateCurrentUser
mutation updateCurrentUser {
updateCurrentUser(
email: "[email protected]"
username: "New username"
password: "New password"
jwt: "jwtToken"
)
{
id
username
email
createdAt
updatedAt
}
}
deleteCurrentUser
mutation deleteCurrentUser {
deleteCurrentUser (
jwt: "jwtToken"
)
{
id
username
email
createdAt
updatedAt
}
}
Posts
createPost
mutation createPost {
createPost (
title: "Title"
body: "Body"
jwt: "jwtToken"
)
{
id
title
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
comments {
id
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
}
}
}
posts
{
posts {
id
title
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
comments {
id
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
}
}
}
post
{
post(id: "id") {
id
title
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
comments {
id
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
}
}
}
updatePost
mutation updatePost {
updatePost(
id: "id"
title: "New title"
body: "New body"
jwt: "jwtToken"
)
{
id
title
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
comments {
id
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
}
}
}
deletePost
mutation deletePost {
deletePost (
id: "id"
jwt: "jwtToken"
)
{
id
title
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
comments {
id
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
}
}
}
Comments
createComment
mutation createComment {
createComment (
body: "Body"
postId: "postId"
jwt: "jwtToken"
)
{
id
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
}
}
comments
{
comments {
id
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
}
}
comment
{
comment(id: "id") {
id
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
}
}
updateComment
mutation updateComment {
updateComment(
id: "id"
body: "New body"
jwt: "jwtToken"
)
{
id
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
}
}
deleteComment
mutation deleteComment {
deleteComment (
id: "id"
jwt: "jwtToken"
)
{
id
body
createdAt
updatedAt
author {
id
username
email
createdAt
updatedAt
}
}
}
