Discuss
Serverless forum software
Table of contents
Video demo
Setup
Backend
-
Clone
git clone [email protected]:JustServerless/discuss.git
to your local machine. -
Run
cd discuss
to change directory. -
Run
npm install
to install all necessary NPM dependencies for the Serverless project. -
Run
serverless project init
to 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 deploy
and select endpoint and function to deploy the CORS enabled endpoint and function.
Client
-
Run
cd client/src && npm install
tin install the NPM dependencies for the client. -
Replace the
API_URL
inclient/src/app/js/actions/index.js
with your deployed endpoint (the root of the endpoint) without thegraphql
string 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.json
and changebucketName
. Runnpm run build
to build the client -
Run
serverless client deploy
to 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
}
}
}