# Query node

This is a query-node project generated by `hydra-cli`. Experiment by modifying `schema.graphql` and the mappings in the `mappings` folder, defined in `manifest.yml`.

For more information about Hydra see: https://dzhelezov.gitbook.io/hydra/

## 1. Building the node

Run

```bash
# Make sure these steps are executed first:
# yarn build:packages; # OR:
# yarn && yarn workspace @joystream/types build && yarn workspace @joystream/metadata-protobuf build
yarn workspace query-node-root build
```

This will generate event decorations for the mappings via `hydra-typegen` inside `mappings/generated` (based on the runtime metadata saved in `../chain-metadata.json`) and a graphql-server along with the TypeORM models based on `schema.graphql` inside `generated/graphql-server`.

## 2. Building the mappings

In order to re-build the mappings only, without re-generating the graphql-server code and event decorations (in case there were no changes in the runtime and `schema.graphql`) you can also run:

```bash
yarn workspace query-node-mappings build
```

## 3. Initializing the database and starting the node

```bash
yarn workspace query-node-root start
```

This script script will:
- Bring up `joystream-node` service (if not already started)
- Bring up `db` service (query node is using a PostgreSQL database to store the data)
- Configure the database (`yarn workspace query-node config:dev`)
- Create the database and initialize schema (`yarn workspace query-node-root db:prepare && yarn workspace query-node-root db:processor:migrate`)
- Start the GraphQL server service (`docker-compose up -d graphql-server`)
- Start the Hydra Processor responsible for processing the runtime events and running the mappings' functions (`docker-compose up -d processor`)

## 4. Stopping the node and removing all associated containers

You can stop the query-node and remove all associated docker containers without affecting any other services by running:

```bash
yarn workspace query-node-root kill
```

- Database connection settings: DB_NAME, DB_HOST, DB_PORT, DB_USER, DB_PASS
- Chain RPC endpoint: WS_PROVIDER_ENDPOINT_URI
- If non-standard types are being used by the Substrate runtime, map type definitions in the json format as an external volume

Follow the links for more information about the [indexer](https://github.com/Joystream/hydra/tree/master/packages/hydra-indexer) service and [indexer-api-gateway](https://github.com/Joystream/hydra/tree/master/packages/hydra-indexer-gateway).

## GraphQL Playground assets url
Query node's user interface, GraphQL Playground, is expecting to be served at `/graphql`. 
If you are serving the files on path like `/query/server/graphql` via some nginx proxy, aliasing, etc. you will need to provide
the base url to query node server via `GRAPHQL_PLAYGROUND_CDN` environment variable.

```
# use the following when serving playground at `/query/server/graphql`
GRAPHQL_PLAYGROUND_CDN="query/server" yarn workspace query-node-root query-node:start:dev 
```
