Implement gql queries for relation entities similar to subgraph (#53)

* Add implementation for one to one relation

* Implement one to many relation in gql queries

* Make changes for gql relation queries in eden-watcher

* Implement subgraph gql relation queries with joins
This commit is contained in:
2021-12-28 16:08:05 +05:30
committed by nabarun
parent 44b3fd59e8
commit f52467f724
13 changed files with 320 additions and 34 deletions
@@ -4,7 +4,7 @@ import {
Example1,
Test
} from '../generated/Example1/Example1';
import { ExampleEntity, RelatedEntity } from '../generated/schema';
import { ExampleEntity, ManyRelatedEntity, RelatedEntity } from '../generated/schema';
export function handleTest (event: Test): void {
log.debug('event.address: {}', [event.address.toHexString()]);
@@ -15,12 +15,12 @@ export function handleTest (event: Test): void {
// Entities can be loaded from the store using a string ID; this ID
// needs to be unique across all entities of the same type
let entity = ExampleEntity.load(event.transaction.hash.toHexString());
let entity = ExampleEntity.load(event.transaction.from.toHex());
// Entities only exist after they have been saved to the store;
// `null` checks allow to create entities on demand
if (!entity) {
entity = new ExampleEntity(event.transaction.hash.toHexString());
entity = new ExampleEntity(event.transaction.from.toHex());
// Entity fields can be set using simple assignments
entity.count = BigInt.fromString('0');
@@ -37,10 +37,10 @@ export function handleTest (event: Test): void {
entity.paramEnum = 'choice1';
entity.paramBigDecimal = BigDecimal.fromString('123');
let relatedEntity = RelatedEntity.load(event.transaction.from.toHex());
let relatedEntity = RelatedEntity.load(event.params.param1);
if (!relatedEntity) {
relatedEntity = new RelatedEntity(event.transaction.from.toHex());
relatedEntity = new RelatedEntity(event.params.param1);
relatedEntity.paramBigInt = BigInt.fromString('123');
}
@@ -48,14 +48,17 @@ export function handleTest (event: Test): void {
bigIntArray.push(entity.count);
relatedEntity.bigIntArray = bigIntArray;
const examples = relatedEntity.examples;
examples.push(entity.id);
relatedEntity.examples = examples;
relatedEntity.save();
entity.related = relatedEntity.id;
const manyRelatedEntity = new ManyRelatedEntity(event.transaction.hash.toHexString());
manyRelatedEntity.count = entity.count;
manyRelatedEntity.save();
const manyRelated = entity.manyRelated;
manyRelated.push(manyRelatedEntity.id);
entity.manyRelated = manyRelated;
// Entities can be written to the store with `.save()`
entity.save();