|
4 years ago | |
---|---|---|
.. | ||
bootstrap | 4 years ago | |
mappings | 4 years ago | |
.gitignore | 4 years ago | |
README.md | 4 years ago | |
build.sh | 4 years ago | |
manifest.yml | 4 years ago | |
package.json | 4 years ago | |
run-tests.sh | 4 years ago | |
schema.graphql | 4 years ago | |
tmp.sh | 4 years ago |
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
.
Run
yarn && yarn bootstrap
and generate the model files as defined in schema.graphql
, create the database and run all the necessary migrations in one shot.
NB! Don't use in production, as it will delete all the existing records.
A separate tool Hydra Typegen can be used for generating Typescript classes for the event handlers (the mappings).
Run
yarn typegen
to run the typegen for events and extrinsics defined in manifest.yml
(it fetches the metadata from an RPC endpoint and blockhash defined there).
Mappings is a separated TypeScript module created in the mappings folder. The handlers exported by the module should match the ones defined in manifest.yml
in the mappings section. Once the necessary files are generated, build it with
yarn mappings:build
Then run the processor:
yarn processor:start
Afterwards start the GraphQL server in a separate terminal (opens a GraphQL playground at localhost by default):
yarn query-node:start:dev
The Hydra Indexer endpoint used by Hydra processor is defined as environment variable INDEXER_ENDPOINT_URL
sourced from .env
. There are publicly available Hydra indexers for Polkadot and Subsocial. For other chains, a self-hosted indexer should be used.
The simplest way to run an indexer locally is to run docker-compose-indexer.yml
with docker-compose
. The following environment variables must be provided:
Follow the links for more information about the indexer service and indexer-api-gateway.
# run from the Joystream monorepo root
# temporarily remove query node dependency from mappings package
sed -i 's/"query-node": "^0.0.0",//' query-node/mappings/package.json
# install dependencies
yarn
# add dummy values to input schema variants that needs it
sed -i 's/type AssetOwnerChannel @variant {/type AssetOwnerChannel @variant {\n dummy: Int/' query-node/schema.graphql
sed -i 's/type AssetNeverProvided @variant {/type AssetNeverProvided @variant {\n dummy: Int/' query-node/schema.graphql
sed -i 's/type AssetDeleted @variant {/type AssetDeleted @variant {\n dummy: Int/' query-node/schema.graphql
sed -i 's/type AssetUploadStatus @variant {/type AssetUploadStatus @variant {\n dummy: Int/' query-node/schema.graphql
yarn workspace @joystream/content-metadata-protobuf build
yarn workspace @joystream/types build
yarn workspace query-node-root build # this will fail during mappings compilation
# setup TS declarations for query node compilation
sed -i 's/"compilerOptions": {/"compilerOptions": {\n "declaration": true,/' query-node/generated/graphql-server/tsconfig.json
# add back dependency
sed -i 's/"dependencies": {/"dependencies": {\n "query-node": "^0.0.0",/' query-node/mappings/package.json
# install query node dependency to mappings
yarn
# yarn workspace query-node compile # probably not needed
sed -i 's/BN/number/' query-node/generated/graphql-server/src/modules/variants/variants.model.ts # replace BigNumber by number
# remove extra variant imports
TMP_VARIANT_IMPORT="import { Asset } from '../variants/variants.model'"
sed -i "s#$TMP_VARIANT_IMPORT##;" query-node/generated/graphql-server/src/modules/channel/channel.model.ts query-node/generated/graphql-server/src/modules/video/video.model.ts
echo $TMP_VARIANT_IMPORT >> query-node/generated/graphql-server/src/modules/channel/channel.model.ts
echo $TMP_VARIANT_IMPORT >> query-node/generated/graphql-server/src/modules/video/video.model.ts
# fix relations cardinality (why is this code generated like this? is input schema wrong or Hydra has a bug?)
sed -i 's/return result.channels/return [result.channels]/' query-node/generated/graphql-server/src/modules/channel-category/channel-category.resolver.ts
sed -i 's/return result.category/return result.category[0]/' query-node/generated/graphql-server/src/modules/channel/channel.resolver.ts
sed -i 's/return result.videos/return [result.videos]/' query-node/generated/graphql-server/src/modules/video-category/video-category.resolver.ts
sed -i 's/return result.category/return result.category[0]/' query-node/generated/graphql-server/src/modules/video/video.resolver.ts
# fix two functions having the same name (why this has to be changed manually?)
sed -i '0,/videoMediaMetadata/s/videoMediaMetadata/videoMediaMetadata2/' query-node/generated/graphql-server/src/modules/video-media-metadata/video-media-metadata.resolver.ts
# add missing dependency
sed -i 's/"dependencies": {/"dependencies": {\n "pg-listen": "^1.7.0",/' query-node/generated/graphql-server/package.json
# install new dependencies
yarn
echo "set -a; . .env; set +a; yarn workspace query-node build:dev" > tmp.sh
chmod +x tmp.sh
./tmp.sh
# build mappings
yarn workspace query-node-root typegen
yarn workspace query-node-mappings build