'Implementing GraphQL Global Object Identification in NestJS (code-first approach)

I am trying to implement Global Object Identification described in GraphQL's documentation in NestJS.

1.) I started by creating a Node interface:

import { ID, InterfaceType, Field } from '@nestjs/graphql'

@InterfaceType()
export abstract class Node {
    @Field(type => ID)
    id: number
}

2.) I implemented it in my model:

import { Table } from "sequelize-typescript";
import { ObjectType } from "@nestjs/graphql";
import { Node } from "src/node/node-interface";

@ObjectType({
    implements: Node
})
@Table
export class User extends Model {
// [Class body here...]
}

3.) Then I created a Query that would return users:

import { Resolver, Query} from "@nestjs/graphql";
import { User } from "./user-model";

@Resolver(of => User)
export class UserResolver {

    @Query(returns => [Node])
    async users() {
        let users = await User.findAll();
        console.log(users);
        return users;
    }
}

4.) Then I performed the test query from the documentation:

{
  __schema {
    queryType {
      fields {
        name
        type {
          name
          kind
        }
        args {
          name
          type {
            kind
            ofType {
              name
              kind
            }
          }
        }
      }
    }
  }
}

5.) But instead of receiving the proper response:

{
  "__schema": {
    "queryType": {
      "fields": [
        // This array may have other entries
        {
          "name": "node",
          "type": {
            "name": "Node",
            "kind": "INTERFACE"
          },
          "args": [
            {
              "name": "id",
              "type": {
                "kind": "NON_NULL",
                "ofType": {
                  "name": "ID",
                  "kind": "SCALAR"
                }
              }
            }
          ]
        }
      ]
    }
  }
}

6.) I get this:

{
  "data": {
    "__schema": {
      "queryType": {
        "fields": [
          {
            "name": "users",
            "type": {
              "name": null,
              "kind": "NON_NULL"
            },
            "args": []
          }
        ]
      }
    }
  }
}

I have no clue what I am doing wrong. I'd appreciate any help with this.



Solution 1:[1]

Maybe it's too late, but I'm at Node Resolver node must be nullable


  import * as GQL from '@nestjs/graphql';

@GQL.Resolver(() => Node, {})
export class NodeResolver {

  @GQL.Query(() => Node, {
    name: 'node',
    defaultValue: [],
    nullable: true,
  })
  node(
    @GQL.Args('id', { type: () => GQL.ID } as GQL.ArgsOptions)
    id: Scalars['ID'],
  ): Promise<Node> {
    // Implement
    return null;
  }
}

result:


          {
            "name": "node",
            "type": {
              "name": "Node",
              "kind": "INTERFACE",
            },
            "args": [
              {
                "name": "id",
                "type": {
                  "kind": "NON_NULL",
                  "ofType": {
                    "name": "ID",
                    "kind": "SCALAR"
                  }
                }
              }
            ]
          },

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Yohany Flores