Get Started
Welcome to the GraphQL Education, the last GraphQL Academy. A different take on learning GraphQL through practical approach. Each module is isolated modules for convenience and efficiency.
You're expected to have elementary knowledge about Docker (opens in a new tab), Node.js (opens in a new tab), GraphQL (opens in a new tab) and TypeScript (opens in a new tab).
The education modules are split into 3 different parts: the database, server and client.
Schema
All of the education modules are designed to the following data model. The schema.graphql (opens in a new tab) looks like this:
schema.graphql
type Query {
"""
The currently authenticated user.
"""
me: User
"""
Retrieve a task by its ID.
"""
task(id: ID!): Task
"""
Retrieve available tasks. Optionally perform a fulltext search using the `searchText` argument.
"""
filterTasks(searchText: String): [Task!]!
}
type Mutation {
login(email: String!, password: String!): User!
register(input: RegisterInput!): User!
createTask(input: CreateTaskInput!): Task!
updateTask(input: UpdateTaskInput!): Task!
deleteTask(input: DeleteTaskInput!): Task!
}
type Subscription {
taskCreated: Task!
taskChanged(id: ID!): Task!
}
type User {
id: ID!
name: String!
email: String!
"""
All tasks that have been created by this user.
"""
createdTasks: [Task!]!
"""
All tasks that have this user set as the assignee.
"""
assignedTasks: [Task!]!
}
enum TaskStatus {
TODO
IN_PROGRESS
DONE
}
type Task {
id: ID!
createdByUserId: ID!
createdBy: User!
"""
Private tasks can be viewed and modified only by the assignee or the user who created it.
"""
private: Boolean!
assigneeUserId: ID
assignee: User
status: TaskStatus!
title: String!
description: String
}
input RegisterInput {
name: String!
email: String!
password: String!
}
input CreateTaskInput {
private: Boolean!
assignee: ID!
status: TaskStatus! = TODO
title: String!
description: String
}
input UpdateTaskInput {
id: ID!
private: Boolean!
assignee: ID!
status: TaskStatus!
title: String!
description: String
}
input DeleteTaskInput {
id: ID!
}
Ports
Some of the modules are exposed and communicated with over the network. All elements of modules will bind to the same ports for convenience:
- Database uses the port 50000 (http://localhost:50000 (opens in a new tab))
- Server uses the port 50005 (http://localhost:50005 (opens in a new tab))