Real-Time Offline Ready Chat App written with GraphQL, AWS AppSync, & AWS Amplify
This project contains an Amplify project (/amplify
) already configured & ready to be deployed. Deploying this project will create the following resources in your account: an authentication configuration using Amazon Cognito, an AWS AppSync GraphQL API, & a DynamoDB table.
npm install -g @aws-amplify/cli
You must also have the CLI configured with a user from your AWS account (
amplify configure
). For a walkthrough of how to do this, check out this video.
git clone https://github.com/aws-samples/aws-appsync-chat.git
npm install
amplify init
amplify push
npm start
If you'd like to tear down the project & delete all of the resources created by this project, run the delete
command.
amplify delete
You can also manually set up your resources if you would like. If you would like to manually create & configure the resources for this project, follow these steps:
npm install -g @aws-amplify
amplify configure
git clone https://github.com/aws-samples/aws-appsync-chat.git
npm install
Delete the amplify folder
Initialize a new Amplify project
amplify init
amplify add auth
Here, either choose the default security choice or configure your own.
amplify add api
Choose Cognito User Pools as the authentication type. When prompted for the GraphQL schema, use the following schema:
type User
@model
@auth(rules: [{ allow: owner, ownerField: "id", queries: null }]) {
id: ID!
username: String!
conversations: [ConvoLink] @connection(name: "UserLinks")
messages: [Message] @connection(name: "UserMessages")
createdAt: String
updatedAt: String
}
type Conversation
@model(
mutations: { create: "createConvo" }
queries: { get: "getConvo" }
subscriptions: null
)
@auth(rules: [{ allow: owner, ownerField: "members" }]) {
id: ID!
messages: [Message] @connection(name: "ConvoMsgs", sortField: "createdAt")
associated: [ConvoLink] @connection(name: "AssociatedLinks")
name: String!
members: [String!]!
createdAt: String
updatedAt: String
}
type Message
@model(subscriptions: null, queries: null)
@auth(rules: [{ allow: owner, ownerField: "authorId" }]) {
id: ID!
author: User @connection(name: "UserMessages", keyField: "authorId")
authorId: String
content: String!
conversation: Conversation! @connection(name: "ConvoMsgs")
messageConversationId: ID!
createdAt: String
updatedAt: String
}
type ConvoLink
@model(
mutations: { create: "createConvoLink", update: "updateConvoLink" }
queries: null
subscriptions: null
) {
id: ID!
user: User! @connection(name: "UserLinks")
convoLinkUserId: ID
conversation: Conversation! @connection(name: "AssociatedLinks")
convoLinkConversationId: ID!
createdAt: String
updatedAt: String
}
type Subscription {
onCreateConvoLink(convoLinkUserId: ID!): ConvoLink
@aws_subscribe(mutations: ["createConvoLink"])
onCreateMessage(messageConversationId: ID!): Message
@aws_subscribe(mutations: ["createMessage"])
}
push
command to create the resources in your account:amplify push
npm start
If you'd like to tear down the project & delete all of the resources created by this project, run the delete
command.
amplify delete
The AWS Amplify Console provides continuous deployment and hosting for modern web apps (single page apps and static site generators) with serverless backends. Continuous deployment allows developers to deploy updates to either the frontend or backend (Lambda functions, GraphQL resolvers) on every code commit to the Git repository.
https://master.unique-id.amplifyapp.com
.This application utilizes 4 database tables:
This library is licensed under the Apache 2.0 License.